from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser, Profile, IdentityVerification


class BootstrapFormMixin:
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for field_name, field in self.fields.items():
            widget = field.widget
            existing_classes = widget.attrs.get("class", "").split()
            if isinstance(widget, (forms.CheckboxInput, forms.CheckboxSelectMultiple, forms.RadioSelect)):
                if "form-check-input" not in existing_classes:
                    existing_classes.append("form-check-input")
            else:
                if "form-control" not in existing_classes:
                    existing_classes.append("form-control")
            widget.attrs["class"] = " ".join(existing_classes).strip()


class CustomUserCreationForm(BootstrapFormMixin, UserCreationForm):
    class Meta:
        model = CustomUser
        fields = ("email", "username", "first_name", "last_name")


class CustomUserChangeForm(BootstrapFormMixin, UserChangeForm):
    class Meta:
        model = CustomUser
        fields = ("email", "username", "first_name", "last_name", "is_active", "is_staff")


class ProfileForm(BootstrapFormMixin, forms.ModelForm):
    class Meta:
        model = Profile
        fields = [
            "display_name",
            "headline",
            "bio",
            "pronouns",
            "gender",
            "birth_date",
            "phone_number",
            "city",
            "state",
            "country",
            "latitude",
            "longitude",
            "timezone",
            "interests",
            "social_links",
            "visibility",
            "can_receive_messages",
        ]
        widgets = {
            "birth_date": forms.DateInput(attrs={"type": "date"}),
            "bio": forms.Textarea(attrs={"rows": 4}),
            "interests": forms.Textarea(attrs={"rows": 3}),
            "social_links": forms.Textarea(attrs={"rows": 3}),
        }


class IdentityVerificationForm(BootstrapFormMixin, forms.ModelForm):
    class Meta:
        model = IdentityVerification
        fields = [
            "government_id",
            "selfie_image",
            "additional_notes",
        ]
