from django import forms

from apps.core.authentication.models import UserProfile
from apps.core.countries import CountryChoiceField
from apps.alumni.careers.models import CVProfile, JobApplication, JobListing


class JobListingForm(forms.ModelForm):
    sector = forms.ChoiceField(
        choices=[("", "— Select a sector —")] + JobListing.SECTOR_CHOICES,
        required=False,
        widget=forms.Select(attrs={"class": "field-input"}),
    )
    # FRREP-TS002 — country + minimum qualification, entered at posting time
    # so the job board filters have something to facet on.
    country = CountryChoiceField(
        required=False,
        attrs={"class": "field-input", "data-s2-placeholder": "Search countries…"},
    )
    min_qualification = forms.ChoiceField(
        choices=[("", "— No minimum specified —")] + list(UserProfile.DegreeLevel.choices),
        required=False,
        widget=forms.Select(attrs={"class": "field-input"}),
    )

    class Meta:
        model = JobListing
        fields = [
            "title",
            "company",
            "location",
            "country",
            "job_type",
            "sector",
            "min_qualification",
            "audience",
            "description",
            "requirements",
            "salary_range",
            "closes_at",
        ]
        widgets = {
            "title": forms.TextInput(attrs={"class": "field-input"}),
            "company": forms.TextInput(attrs={"class": "field-input"}),
            "location": forms.TextInput(attrs={"class": "field-input"}),
            "job_type": forms.Select(attrs={"class": "field-input"}),
            "audience": forms.Select(attrs={"class": "field-input"}),
            "description": forms.Textarea(attrs={"class": "field-input", "rows": 6}),
            "requirements": forms.Textarea(attrs={"class": "field-input", "rows": 4}),
            "salary_range": forms.TextInput(attrs={"class": "field-input", "placeholder": "e.g. USD 40,000–60,000"}),
            "closes_at": forms.DateInput(attrs={"class": "field-input", "type": "date"}),
        }


class EmployerListingReviewForm(forms.ModelForm):
    class Meta:
        model = JobListing
        fields = ["listing_status", "employer_notes", "is_active"]
        widgets = {
            "listing_status": forms.Select(attrs={"class": "field-input"}),
            "employer_notes": forms.Textarea(attrs={"class": "field-input", "rows": 3}),
        }


class JobApplicationStatusForm(forms.Form):
    status = forms.ChoiceField(
        choices=JobApplication.Status.choices,
        widget=forms.Select(attrs={"class": "field-input"}),
    )
    note = forms.CharField(
        required=False,
        label="Note to applicant (optional)",
        help_text="Shared with the applicant in the decision email and notification.",
        widget=forms.Textarea(
            attrs={"class": "field-input", "rows": 3, "placeholder": "Optional message…"}
        ),
    )


class JobApplicationForm(forms.Form):
    cover_letter = forms.CharField(
        required=False,
        widget=forms.Textarea(
            attrs={"class": "field-input", "rows": 5, "placeholder": "Optional cover letter…"}
        ),
        label="Cover letter",
    )
    cover_letter_file = forms.FileField(
        required=False,
        label="Cover letter file",
        help_text="Optional PDF or Word document.",
        widget=forms.ClearableFileInput(attrs={"class": "field-input"}),
    )


class CVProfileForm(forms.ModelForm):
    class Meta:
        model = CVProfile
        fields = ["headline", "summary", "cv_document", "is_public"]
        widgets = {
            "headline": forms.TextInput(attrs={"class": "field-input", "placeholder": "Your professional headline"}),
            "summary": forms.Textarea(
                attrs={
                    "class": "field-input",
                    "rows": 6,
                    "placeholder": "Use the editor above for a full narrative: themes, impact, geography, and career direction.",
                }
            ),
            "cv_document": forms.ClearableFileInput(attrs={"class": "field-input"}),
        }
