from django import forms

from .models import Article, Topic


class ArticleFilterForm(forms.Form):
    q = forms.CharField(
        required=False,
        max_length=120,
        label='Search',
        widget=forms.TextInput(
            attrs={
                'placeholder': 'Search startup, AI, funding, product…',
                'class': 'form-control form-control-lg search-input',
            }
        ),
    )
    topic = forms.ChoiceField(
        required=False,
        label='Topic',
        widget=forms.Select(attrs={'class': 'form-select form-select-lg'}),
    )

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        topic_choices = [('', 'All topics')]
        topic_choices.extend((topic.slug, topic.name) for topic in Topic.objects.order_by('name'))
        self.fields['topic'].choices = topic_choices


class OriginalArticleForm(forms.ModelForm):
    class Meta:
        model = Article
        fields = ['title', 'topic', 'author_name', 'excerpt', 'content', 'is_featured']
        widgets = {
            'title': forms.TextInput(attrs={'class': 'form-control form-control-lg', 'placeholder': 'Write a sharp headline'}),
            'topic': forms.Select(attrs={'class': 'form-select form-select-lg'}),
            'author_name': forms.TextInput(attrs={'class': 'form-control form-control-lg', 'placeholder': 'Editor or columnist name'}),
            'excerpt': forms.Textarea(attrs={'class': 'form-control', 'rows': 3, 'placeholder': 'A short dek for cards and search results'}),
            'content': forms.Textarea(attrs={'class': 'form-control', 'rows': 10, 'placeholder': 'Draft the story, analysis, or curated roundup'}),
            'is_featured': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
        }
        labels = {
            'excerpt': 'Deck / summary',
            'is_featured': 'Pin as featured story',
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['topic'].queryset = Topic.objects.order_by('name')
        self.fields['topic'].empty_label = 'Choose a topic'
        self.fields['topic'].required = True

    def clean(self):
        cleaned_data = super().clean()
        excerpt = cleaned_data.get('excerpt', '')
        content = cleaned_data.get('content', '')
        if len(excerpt.strip()) < 20:
            self.add_error('excerpt', 'Please add at least 20 characters so cards feel editorially complete.')
        if len(content.strip()) < 80:
            self.add_error('content', 'Please write at least 80 characters to create a publishable story.')
        return cleaned_data
