

from django import forms
from django.contrib.auth.models import User
from exams.models import UserProfile


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


class ExamSubjectForm(forms.ModelForm):
    class Meta:
        model = ExamSubject
        fields = [
            "subject_code",
            "subject_name_eng",
            "subject_name_sw",
            "is_active",
        ]

        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"}),
            "is_active": forms.CheckboxInput(attrs={"class": "form-check-input"}),
        }



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"]
