import pytz
from django import forms
from .models import Resource, AppointmentType, AvailabilityRule, BlockedPeriod, ExceptionDay, CustomField, Business

class BusinessForm(forms.ModelForm):
    timezone = forms.ChoiceField(
        choices=[(tz, tz) for tz in pytz.common_timezones],
        widget=forms.Select(attrs={'class': 'w-full px-4 py-3 bg-white border border-accent/30 rounded-sm focus:border-primary focus:ring-1 focus:ring-primary outline-none transition-all font-medium text-sm'})
    )

    class Meta:
        model = Business
        fields = [
            'name', 'logo', 'timezone',
            'phone', 'phone_secondary', 'email_contact', 'website',
            'address', 'city', 'country',
            'banner_message', 'banner_type', 'banner_active',
            'business_status', 'status_message', 'status_auto'
        ]

class ResourceForm(forms.ModelForm):
    class Meta:
        model = Resource
        fields = ['name', 'email', 'photo', 'is_active']

class AppointmentTypeForm(forms.ModelForm):
    class Meta:
        model = AppointmentType
        fields = ['name', 'slug', 'description', 'duration_minutes', 'slot_capacity', 'resources', 'is_active']
        widgets = {
            'resources': forms.CheckboxSelectMultiple(),
        }
    
    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user', None)
        super().__init__(*args, **kwargs)
        if user:
            self.fields['resources'].queryset = Resource.objects.filter(user=user, deleted_at__isnull=True)

class AvailabilityRuleForm(forms.ModelForm):
    class Meta:
        model = AvailabilityRule
        fields = ['resource', 'weekday', 'start_time', 'end_time', 'break_start', 'break_end', 'is_active']
        widgets = {
            'start_time': forms.TimeInput(attrs={'type': 'time'}),
            'end_time': forms.TimeInput(attrs={'type': 'time'}),
            'break_start': forms.TimeInput(attrs={'type': 'time'}),
            'break_end': forms.TimeInput(attrs={'type': 'time'}),
        }
    
    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user', None)
        super().__init__(*args, **kwargs)
        if user:
            self.fields['resource'].queryset = Resource.objects.filter(user=user, deleted_at__isnull=True)

class BlockedPeriodForm(forms.ModelForm):
    class Meta:
        model = BlockedPeriod
        fields = ['resource', 'start_date', 'end_date', 'reason', 'is_active']
        widgets = {
            'start_date': forms.DateInput(attrs={'type': 'date'}),
            'end_date': forms.DateInput(attrs={'type': 'date'}),
        }
    
    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user', None)
        super().__init__(*args, **kwargs)
        self.fields['reason'].help_text = "Este texto será visible para los clientes en la agenda pública (Ej: Vacaciones)."
        if user:
            self.fields['resource'].queryset = Resource.objects.filter(user=user, deleted_at__isnull=True)

class ExceptionDayForm(forms.ModelForm):
    class Meta:
        model = ExceptionDay
        fields = ['resource', 'date', 'is_available', 'start_time', 'end_time', 'reason']
        widgets = {
            'date': forms.DateInput(attrs={'type': 'date'}),
            'start_time': forms.TimeInput(attrs={'type': 'time'}),
            'end_time': forms.TimeInput(attrs={'type': 'time'}),
        }
    
    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user', None)
        super().__init__(*args, **kwargs)
        self.fields['reason'].help_text = "Este texto será visible para los clientes en la agenda pública (Ej: Horario especial por evento)."
        if user:
            self.fields['resource'].queryset = Resource.objects.filter(user=user, deleted_at__isnull=True)

class CustomFieldForm(forms.ModelForm):
    class Meta:
        model = CustomField
        fields = ['appointment_type', 'label', 'slug', 'field_type', 'options', 'is_required']
