"""
Forms for the courses app.
"""
from django import forms
from apps.courses.models import (
    CATEGORY_BOTH,
    CATEGORY_CERT,
    CATEGORY_COURSE,
    Category,
    Course,
    Module,
    Lesson,
)


class CategoryForm(forms.ModelForm):
    class Meta:
        model = Category
        fields = ('name', 'description', 'applies_to', 'order', 'is_active')
        widgets = {
            'name': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'e.g. Web Development'}),
            'description': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Short description (optional)'}),
            'applies_to': forms.Select(attrs={'class': 'form-select'}),
            'order': forms.NumberInput(attrs={'class': 'form-control', 'min': '0'}),
            'is_active': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
        }


class CourseForm(forms.ModelForm):
    """Form for creating and editing a course (teachers — no fee/price field)."""
    class Meta:
        model = Course
        fields = (
            'title', 'category', 'thumbnail', 'short_description', 'full_description',
            'duration', 'start_date', 'end_date', 'status',
        )
        widgets = {
            'title': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Course Title'}),
            'category': forms.Select(attrs={'class': 'form-select'}),
            'short_description': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Short description (max 300 chars)'}),
            'full_description': forms.Textarea(attrs={'class': 'form-control', 'rows': 5}),
            'duration': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'e.g. 10 hours'}),
            'start_date': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}),
            'end_date': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}),
            'status': forms.Select(attrs={'class': 'form-select'}),
            'thumbnail': forms.FileInput(attrs={'class': 'form-control'}),
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['category'].queryset = Category.objects.filter(
            is_active=True,
            applies_to__in=[CATEGORY_COURSE, CATEGORY_BOTH],
        )
        self.fields['category'].required = False


class AdminCourseForm(forms.ModelForm):
    """Extended course form for admin — includes teacher assignment + growth toggles."""
    class Meta:
        model = Course
        fields = (
            'title', 'category', 'thumbnail', 'short_description', 'full_description',
            'price', 'duration', 'start_date', 'end_date', 'status', 'teachers',
            'is_featured', 'enable_free_diagnostic',
        )
        widgets = {
            'title': forms.TextInput(attrs={'class': 'form-control'}),
            'category': forms.Select(attrs={'class': 'form-select'}),
            'short_description': forms.TextInput(attrs={'class': 'form-control'}),
            'full_description': forms.Textarea(attrs={'class': 'form-control', 'rows': 5}),
            'price': forms.NumberInput(attrs={'class': 'form-control', 'step': '0.01'}),
            'duration': forms.TextInput(attrs={'class': 'form-control'}),
            'start_date': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}),
            'end_date': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}),
            'status': forms.Select(attrs={'class': 'form-select'}),
            'thumbnail': forms.FileInput(attrs={'class': 'form-control'}),
            'teachers': forms.CheckboxSelectMultiple(),
            'is_featured': forms.CheckboxInput(attrs={'class': 'form-check-input', 'role': 'switch'}),
            'enable_free_diagnostic': forms.CheckboxInput(attrs={
                'class': 'form-check-input', 'role': 'switch',
            }),
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        from apps.accounts.models import CustomUser
        self.fields['category'].queryset = Category.objects.filter(
            is_active=True,
            applies_to__in=[CATEGORY_COURSE, CATEGORY_BOTH],
        )
        self.fields['category'].required = False
        self.fields['teachers'].queryset = CustomUser.objects.filter(
            role='teacher', is_active=True
        ).order_by('full_name', 'username')
        self.fields['teachers'].required = False
        self.fields['teachers'].help_text = 'Assign teachers for this course. Their students are those enrolled here.'
        self.fields['is_featured'].help_text = 'Show on the home page featured section.'
        self.fields['enable_free_diagnostic'].help_text = (
            'Show “Free skill check (no login)” on the public course page. '
            'Requires ≥12 active + verified questions in the course bank.'
        )


class ModuleForm(forms.ModelForm):
    """Form for creating and editing a learning module."""
    class Meta:
        model = Module
        fields = (
            'title', 'description', 'module_type', 'content_type', 'content_body',
            'content_url', 'pdf_file', 'order', 'is_free_preview',
        )
        widgets = {
            'title': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Module Title'}),
            'description': forms.Textarea(attrs={'class': 'form-control', 'rows': 2}),
            'module_type': forms.Select(attrs={'class': 'form-select'}),
            'content_type': forms.Select(attrs={'class': 'form-select'}),
            'content_body': forms.Textarea(attrs={'class': 'form-control', 'rows': 5}),
            'content_url': forms.URLInput(attrs={'class': 'form-control', 'placeholder': 'https://youtube.com/... or PDF URL'}),
            'pdf_file': forms.FileInput(attrs={'class': 'form-control'}),
            'order': forms.NumberInput(attrs={'class': 'form-control', 'min': '0'}),
            'is_free_preview': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
        }


class LessonForm(forms.ModelForm):
    """Form for creating and editing a lesson."""
    class Meta:
        model = Lesson
        fields = ('title', 'content', 'video_url', 'video_file', 'attachment',
                  'meeting_link', 'meeting_id', 'meeting_password', 'order', 'is_preview')
        widgets = {
            'title': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Lesson Title'}),
            'content': forms.Textarea(attrs={'class': 'form-control', 'rows': 5}),
            'video_url': forms.URLInput(attrs={'class': 'form-control', 'placeholder': 'https://youtube.com/...'}),
            'video_file': forms.FileInput(attrs={'class': 'form-control'}),
            'attachment': forms.FileInput(attrs={'class': 'form-control'}),
            'meeting_link': forms.URLInput(attrs={'class': 'form-control', 'placeholder': 'https://zoom.us/j/... or meet.google.com/...'}),
            'meeting_id': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'e.g. 123 456 7890'}),
            'meeting_password': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Meeting passcode'}),
            'order': forms.NumberInput(attrs={'class': 'form-control', 'min': '0'}),
            'is_preview': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
        }


class PracticalSubmissionForm(forms.Form):
    submission_type = forms.ChoiceField(
        choices=[
            ('github_link', 'GitHub repository link'),
            ('figma_link', 'Figma file link'),
            ('file_upload', 'File upload (ZIP)'),
        ],
        widget=forms.Select(attrs={'class': 'form-select', 'id': 'id_submission_type'}),
    )
    submission_url = forms.URLField(
        required=False,
        widget=forms.URLInput(attrs={
            'class': 'form-control',
            'placeholder': 'https://github.com/... or https://figma.com/...',
        }),
    )
    submission_file = forms.FileField(
        required=False,
        widget=forms.FileInput(attrs={'class': 'form-control', 'accept': '.zip,.rar,.7z,application/zip'}),
    )


class PracticalReviewForm(forms.Form):
    action = forms.ChoiceField(
        choices=[
            ('approve', 'Approve'),
            ('needs_revision', 'Request resubmission'),
            ('reject', 'Reject'),
        ],
        widget=forms.RadioSelect,
    )
    reviewer_notes = forms.CharField(
        required=False,
        widget=forms.Textarea(attrs={
            'class': 'form-control',
            'rows': 4,
            'placeholder': 'Notes shown to the candidate (required for reject / resubmission)',
        }),
    )


class DiagnosticLeadForm(forms.Form):
    email = forms.EmailField(
        widget=forms.EmailInput(attrs={
            'class': 'form-control',
            'placeholder': 'you@example.com',
            'required': True,
        }),
    )
    whatsapp = forms.CharField(
        required=False,
        max_length=30,
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': '03XX-XXXXXXX (optional but recommended for discount codes)',
        }),
    )
