from django import forms

from apps.customers.models import Customer
from . import queries
from .models import Appointment, AppointmentSlot


class PartyForm(forms.Form):
    customer = forms.ModelChoiceField(queryset=Customer.objects.none())
    device = forms.ModelChoiceField(queryset=queries.Device.objects.none(), required=False)
    reason = forms.CharField(max_length=2000, required=False, widget=forms.Textarea(attrs={"rows": 3}),
                             help_text="Do not record passwords, PINs or account credentials.")

    def __init__(self, *args, actor, center, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields["customer"].queryset = queries.customers(actor, center).filter(is_active=True)
        self.fields["device"].queryset = queries.devices(actor, center).filter(is_active=True).select_related("product_model__brand")


class AppointmentForm(PartyForm):
    slot = forms.ModelChoiceField(queryset=AppointmentSlot.objects.none())
    channel = forms.ChoiceField(choices=Appointment._meta.get_field("channel").choices)

    def __init__(self, *args, **kwargs):
        center = kwargs["center"]
        super().__init__(*args, **kwargs)
        from django.utils import timezone
        self.fields["slot"].queryset = AppointmentSlot.objects.filter(service_center=center, is_active=True,
            date__gte=timezone.localdate(timezone=timezone.get_default_timezone()))


class SlotForm(forms.Form):
    date = forms.DateField(widget=forms.DateInput(attrs={"type": "date"}))
    start_time = forms.TimeField(widget=forms.TimeInput(attrs={"type": "time"}))
    end_time = forms.TimeField(widget=forms.TimeInput(attrs={"type": "time"}))
    capacity = forms.IntegerField(min_value=1)


class ConfigureSlotForm(forms.Form):
    capacity = forms.IntegerField(min_value=1)
    is_active = forms.BooleanField(required=False)


class ReasonForm(forms.Form):
    reason = forms.CharField(max_length=2000, widget=forms.Textarea(attrs={"rows": 3}))


class IntakeForm(forms.Form):
    device = forms.ModelChoiceField(queryset=queries.Device.objects.none(), required=False)

    def __init__(self, *args, actor, center, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields["device"].queryset = queries.devices(actor, center).filter(is_active=True).select_related("product_model__brand")


class CustomerForm(forms.Form):
    customer_type = forms.ChoiceField(choices=Customer.Type.choices)
    full_name = forms.CharField(max_length=200, required=False)
    organization_name = forms.CharField(max_length=200, required=False)
    primary_mobile = forms.CharField(max_length=32, required=False)
    primary_email = forms.EmailField(required=False)
