from django import forms
from apps.communications.models import NotificationTemplate
from apps.organization.models import ServiceCenter
from .models import SlaPolicy
from . import queries


class PolicyForm(forms.ModelForm):
    class Meta:
        model = SlaPolicy
        fields = ["company", "code", "name", "service_center", "product_category", "is_active",
                  "effective_from", "effective_until", "target_minutes", "warning_minutes",
                  "due_soon_template", "overdue_template"]
        widgets = {"effective_from": forms.DateInput(attrs={"type": "date"}),
                   "effective_until": forms.DateInput(attrs={"type": "date"})}

    def __init__(self, *args, actor, **kwargs):
        super().__init__(*args, **kwargs)
        allowed = queries.companies(actor)
        self.fields["company"].queryset = allowed
        self.fields["service_center"].queryset = ServiceCenter.objects.filter(company__in=allowed)
        for field in ("due_soon_template", "overdue_template"):
            self.fields[field].queryset = NotificationTemplate.objects.filter(company__in=allowed, is_active=True)
            self.fields[field].help_text = "Optional customer alert about the recorded SLA event. Dispatch remains separate."
        if not self.instance._state.adding:
            self.fields["company"].disabled = True
            self.fields["code"].disabled = True


class Filters(forms.Form):
    center = forms.ModelChoiceField(queryset=ServiceCenter.objects.none(), required=False, label="Service center")
    state = forms.ChoiceField(choices=[("", "All states")]+[(v, v.replace("_", " ").title()) for v in queries.STATES], required=False)
    completed_since = forms.DateField(required=False, widget=forms.DateInput(attrs={"type": "date"}), label="Ready on or after")

    def __init__(self, *args, actor, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields["center"].queryset = queries.centers(actor)
