

from django import forms
from django.contrib.auth.models import User
from exams.models import UserProfile



# forms.py
from django import forms
from .models import SiteSetting

class SiteSettingForm(forms.ModelForm):
    class Meta:
        model = SiteSetting
        fields = '__all__'
        widgets = {
            'about': forms.Textarea(attrs={'rows': 4}),
            'header_text': forms.Textarea(attrs={'rows': 3}),
            'footer_text': forms.Textarea(attrs={'rows': 4}),
            'footer_links': forms.Textarea(attrs={'rows': 3, 'placeholder': '[{"title": "About", "url": "/about"}]'}),
            'contact_address': forms.Textarea(attrs={'rows': 3}),
            'custom_css': forms.Textarea(attrs={'rows': 5}),
            'custom_js': forms.Textarea(attrs={'rows': 5}),
            'meta_description': forms.Textarea(attrs={'rows': 2}),
            'meta_keywords': forms.Textarea(attrs={'rows': 2}),
        }






        
class ProfileUpdateForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ("photo", "phone")

        widgets = {
            "photo": forms.ClearableFileInput(attrs={
                "class": "d-none",
                "id": "photoInput"
            }),
            "phone": forms.TextInput(attrs={
                "class": "form-control",
                "placeholder": "Enter phone number"
            })
        }


class UserUpdateForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ["first_name", "last_name", "email"]

class ProfileUpdateForm(forms.ModelForm):
    email = forms.EmailField(required=True)
    first_name = forms.CharField(required=True)
    last_name = forms.CharField(required=True)

    class Meta:
        model = UserProfile
        fields = ["photo", "phone"]

    def save(self, user, commit=True):
        profile = super().save(commit=False)
        user.email = self.cleaned_data["email"]
        user.first_name = self.cleaned_data["first_name"]
        user.last_name = self.cleaned_data["last_name"]
        if commit:
            user.save()
            profile.save()
        return profile

from django import forms
from exams.models import School


class SchoolForm(forms.ModelForm):
    class Meta:
        model = School
        fields = [
            "school_code",
            "school_regno",
            "name",
            "region",
            "district",
            "ward",
            "ownership",
            "latitude",
            "longitude",
        ]

        widgets = {
            "school_code": forms.TextInput(attrs={"class": "form-control"}),
            "school_regno": forms.TextInput(attrs={"class": "form-control"}),
            "name": forms.TextInput(attrs={"class": "form-control"}),

            "region": forms.Select(attrs={"class": "form-select"}),
            "district": forms.Select(attrs={"class": "form-select"}),
            "ward": forms.Select(attrs={"class": "form-select"}),

            "ownership": forms.Select(attrs={"class": "form-select"}),
            "latitude": forms.NumberInput(attrs={
                "class": "form-control",
                "step": "0.000001"
            }),
            "longitude": forms.NumberInput(attrs={
                "class": "form-control",
                "step": "0.000001"
            }),
        }



from django import forms
from exams.models import ExamType


class ExamTypeForm(forms.ModelForm):
    class Meta:
        model = ExamType
        fields = ["code", "name", "description", "is_active"]

        widgets = {
            "code": forms.TextInput(attrs={"class": "form-control"}),
            "name": forms.TextInput(attrs={"class": "form-control"}),
            "description": forms.Textarea(attrs={
                "class": "form-control",
                "rows": 3
            }),
            "is_active": forms.CheckboxInput(attrs={"class": "form-check-input"}),
        }



from django import forms
from exams.models import ExamSubject


from django import forms
from .models import ExamSubject


class ExamSubjectForm(forms.ModelForm):

    class Meta:
        model = ExamSubject
        fields = [
            "subject_code",
            "subject_name_eng",
            "subject_name_sw",
            "subject_type",
            "subject_shortname",
            "subject_level",
            "academic_level",
            "number_of_papers",
            "is_principal",
            "is_practical",
            "is_active",
            "color_code",
        ]

        widgets = {
            "subject_code": forms.TextInput(attrs={"class": "form-control"}),
            "subject_name_eng": forms.TextInput(attrs={"class": "form-control"}),
            "subject_name_sw": forms.TextInput(attrs={"class": "form-control"}),
            "subject_type": forms.Select(attrs={"class": "form-select"}),
            "subject_shortname": forms.TextInput(attrs={"class": "form-control"}),
            "subject_level": forms.TextInput(attrs={"class": "form-control"}),
            "academic_level": forms.Select(attrs={"class": "form-select"}),
            "number_of_papers": forms.NumberInput(attrs={
                "class": "form-control",
                "min": 1,
                "max": 3
            }),
            "color_code": forms.TextInput(attrs={
                "type": "color",
                "class": "form-control form-control-color"
            }),
        }




from django import forms
from .models import (
    SchoolClass,
    Stream,
    Teacher,
    ExamSubject,
    TimetableSubject,
    TeacherSubject,
)

class SchoolClassForm(forms.ModelForm):
    class Meta:
        model = SchoolClass
        fields = ["name"]

    def __init__(self, *args, **kwargs):
        self.school = kwargs.pop("school", None)
        super().__init__(*args, **kwargs)

    def save(self, commit=True):
        obj = super().save(commit=False)
        if self.school:
            obj.school = self.school
        if commit:
            obj.save()
        return obj

class StreamForm(forms.ModelForm):
    class Meta:
        model = Stream
        fields = ["school_class", "name"]

    def __init__(self, *args, **kwargs):
        self.school = kwargs.pop("school", None)
        super().__init__(*args, **kwargs)

        if self.school:
            self.fields["school_class"].queryset = SchoolClass.objects.filter(school=self.school)

    def save(self, commit=True):
        obj = super().save(commit=False)
        if self.school:
            obj.school = self.school
        if commit:
            obj.save()
        return obj


class TeacherForm(forms.ModelForm):
    class Meta:
        model = Teacher
        fields = ["name"]

    def __init__(self, *args, **kwargs):
        self.school = kwargs.pop("school", None)
        super().__init__(*args, **kwargs)

    def save(self, commit=True):
        obj = super().save(commit=False)
        if self.school:
            obj.school = self.school
        if commit:
            obj.save()
        return obj


class TimetableSubjectForm(forms.ModelForm):
    class Meta:
        model = TimetableSubject
        fields = ["exam_subject", "weekly_periods", "morning_priority"]

    def __init__(self, *args, **kwargs):
        self.school = kwargs.pop("school", None)
        super().__init__(*args, **kwargs)

    def save(self, commit=True):
        obj = super().save(commit=False)
        if self.school:
            obj.school = self.school
        if commit:
            obj.save()
        return obj


class TeacherSubjectForm(forms.ModelForm):
    class Meta:
        model = TeacherSubject
        fields = ["teacher", "subject", "stream"]

    def __init__(self, *args, **kwargs):
        self.school = kwargs.pop("school", None)
        super().__init__(*args, **kwargs)

    def save(self, commit=True):
        obj = super().save(commit=False)
        if self.school:
            obj.school = self.school
        if commit:
            obj.save()
        return obj
        
        if self.school:
            self.fields["teacher"].queryset = Teacher.objects.filter(school=self.school)
            self.fields["stream"].queryset = Stream.objects.filter(school=self.school)


from django import forms
from django.contrib.auth import get_user_model

User = get_user_model()

class UserAdminUpdateForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ["username", "email", "is_active"]



from django import forms
from .models import (
    AcademicLevel,
    JointExamProject,
    GradingRule,
    DivisionRule,
    ExamScore
)


class AcademicLevelForm(forms.ModelForm):
    class Meta:
        model = AcademicLevel
        fields = ['code', 'name', 'description']
        widgets = {
            'description': forms.Textarea(attrs={'rows': 3}),
        }


from django import forms
from .models import JointExamProject

class JointExamProjectForm(forms.ModelForm):
    class Meta:
        model = JointExamProject
        fields = [
            'name', 'title', 'project_place', 'project_logo', 
            'academic_level', 'year', 'description', 'is_active'
        ]
        widgets = {
            'name': forms.TextInput(attrs={
                'class': 'form-control',
                'placeholder': 'e.g., Kigoma Regional Mock Examination'
            }),
            'title': forms.Textarea(attrs={
                'class': 'form-control',
                'rows': 2,
                'placeholder': 'Full title for reports (optional)'
            }),
            'project_place': forms.TextInput(attrs={
                'class': 'form-control',
                'placeholder': 'e.g., Kigoma Region'
            }),
            'project_logo': forms.FileInput(attrs={
                'class': 'form-control'
            }),
            'academic_level': forms.Select(attrs={
                'class': 'form-select'
            }),
            'year': forms.NumberInput(attrs={
                'class': 'form-control',
                'placeholder': 'e.g., 2024'
            }),
            'description': forms.Textarea(attrs={
                'class': 'form-control',
                'rows': 3,
                'placeholder': 'Additional information about this project'
            }),
            'is_active': forms.CheckboxInput(attrs={
                'class': 'form-check-input'
            }),
        }
        labels = {
            'name': 'Project Short Name',
            'title': 'Project Full Title',
            'project_place': 'Project Location',
            'project_logo': 'Project Logo',
            'academic_level': 'Academic Level',
            'year': 'Year',
            'description': 'Description',
            'is_active': 'Active',
        }


class GradingRuleForm(forms.ModelForm):
    class Meta:
        model = GradingRule
        fields = ['academic_level', 'min_score', 'max_score', 'grade', 'points']


class DivisionRuleForm(forms.ModelForm):
    class Meta:
        model = DivisionRule
        fields = ['academic_level', 'min_points', 'max_points', 'division']


class ExamScoreForm(forms.ModelForm):
    class Meta:
        model = ExamScore
        fields = ['project', 'student', 'paper', 'score']