from django import forms

from jobs.category_data import CATEGORY_HELP_TEXT, active_job_categories, numbered_category_label

from .models import SeekerCategory, SeekerProfile


class SeekerFilterForm(forms.Form):
    q = forms.CharField(required=False)
    location = forms.CharField(required=False)
    industry = forms.CharField(required=False)
    category = forms.MultipleChoiceField(required=False, widget=forms.CheckboxSelectMultiple)
    experience_level = forms.MultipleChoiceField(
        required=False,
        choices=SeekerProfile.ExperienceLevel.choices,
        widget=forms.CheckboxSelectMultiple,
    )
    availability = forms.MultipleChoiceField(
        required=False,
        choices=SeekerProfile.Availability.choices,
        widget=forms.CheckboxSelectMultiple,
    )
    sort = forms.ChoiceField(
        required=False,
        choices=[
            ('featured', 'Premium First'),
            ('experience', 'Most Experienced'),
            ('recent', 'Recently Active'),
            ('name', 'Alphabetical'),
        ],
        initial='featured',
    )

    def __init__(self, *args, category_choices=None, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['category'].choices = category_choices or []


class SeekerProfileForm(forms.ModelForm):
    clear_cover_image = forms.BooleanField(
        required=False,
        label='Remove cover photo',
    )

    class Meta:
        model = SeekerProfile
        fields = [
            'cover_image',
            'full_name',
            'headline',
            'job_category',
            'location',
            'years_experience',
            'experience_level',
            'availability',
            'skills',
            'bio',
            'education',
            'experience_summary',
            'qualification',
            'salary_min',
            'salary_max',
            'cv_file',
            'is_public',
            'is_online',
        ]
        widgets = {
            'cover_image': forms.FileInput(attrs={'class': 'form-control', 'accept': 'image/*'}),
            'full_name': forms.TextInput(attrs={'class': 'form-control'}),
            'headline': forms.TextInput(attrs={'class': 'form-control'}),
            'job_category': forms.Select(attrs={'class': 'form-control'}),
            'location': forms.TextInput(attrs={'class': 'form-control'}),
            'years_experience': forms.NumberInput(attrs={'class': 'form-control', 'min': 0}),
            'experience_level': forms.Select(attrs={'class': 'form-control'}),
            'availability': forms.Select(attrs={'class': 'form-control'}),
            'skills': forms.Textarea(attrs={'class': 'form-control', 'rows': 4, 'placeholder': 'One skill per line'}),
            'bio': forms.Textarea(attrs={'class': 'form-control', 'rows': 5}),
            'education': forms.Textarea(attrs={'class': 'form-control', 'rows': 3, 'placeholder': 'One entry per line'}),
            'experience_summary': forms.Textarea(attrs={'class': 'form-control', 'rows': 4, 'placeholder': 'One role per line'}),
            'qualification': forms.TextInput(attrs={'class': 'form-control'}),
            'salary_min': forms.NumberInput(attrs={'class': 'form-control', 'min': 0}),
            'salary_max': forms.NumberInput(attrs={'class': 'form-control', 'min': 0}),
            'cv_file': forms.FileInput(attrs={
                'class': 'form-control',
                'accept': '.pdf,.doc,.docx,.txt,.rtf,.odt,.jpg,.jpeg,.png',
            }),
            'is_public': forms.CheckboxInput(),
            'is_online': forms.CheckboxInput(),
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['cover_image'].label = 'Cover photo'
        self.fields['cover_image'].help_text = (
            'Banner image shown on your public profile and homepage carousel cards. '
            'Recommended size: 1200×400 px or wider.'
        )
        self.fields['is_public'].label = 'Public profile'
        self.fields['is_public'].help_text = (
            'When enabled, your profile appears in Find Talent and has a public profile page.'
        )
        self.fields['is_online'].label = 'Show as online'
        self.fields['is_online'].help_text = (
            'When disabled, you appear offline and are hidden from the homepage carousel.'
        )
        self.fields['job_category'].label = 'Job Category'
        self.fields['job_category'].queryset = active_job_categories()
        self.fields['job_category'].empty_label = 'Select a job category…'
        self.fields['job_category'].help_text = CATEGORY_HELP_TEXT
        self.fields['job_category'].label_from_instance = numbered_category_label

    def save(self, commit=True):
        profile = super().save(commit=False)
        if self.cleaned_data.get('clear_cover_image') and profile.cover_image:
            profile.cover_image.delete(save=False)
            profile.cover_image = None
        if commit:
            profile.save()
        return profile


class SeekerCategoryForm(forms.ModelForm):
    class Meta:
        model = SeekerCategory
        fields = ['name', 'slug', 'icon', 'sort_order', 'is_active']
        widgets = {
            'name': forms.TextInput(attrs={'class': 'form-control'}),
            'slug': forms.TextInput(attrs={'class': 'form-control'}),
            'icon': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'fa-briefcase'}),
            'sort_order': forms.NumberInput(attrs={'class': 'form-control', 'min': 0}),
            'is_active': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['slug'].required = False
        self.fields['slug'].help_text = 'Leave blank to auto-generate from name.'

    def clean_slug(self):
        slug = self.cleaned_data.get('slug', '').strip()
        if slug:
            return slug
        name = self.cleaned_data.get('name', '')
        from django.utils.text import slugify
        return slugify(name)
