from django import forms
from .models import InventarioAdministrativo, InventarioTactico, Directores, Subjefes, Unidades, AsignacionAdministrativa, AsignacionTactica



class InventarioAdministrativoForm(forms.ModelForm):
    class Meta:
        model = InventarioAdministrativo
        fields = ['placa_militar', 'clase', 'tipo', 'marca', 'modelo', 'color', 'placa_mtc', 'ano', 'serial_carroceria']
        widgets = {
            'placa_militar': forms.TextInput(attrs={'class': 'form-control', 'style': 'text-transform: uppercase;'}),
            'clase': forms.TextInput(attrs={'class': 'form-control', 'style': 'text-transform: uppercase;'}),
            'tipo': forms.TextInput(attrs={'class': 'form-control', 'style': 'text-transform: uppercase;'}),
            'marca': forms.TextInput(attrs={'class': 'form-control', 'style': 'text-transform: uppercase;'}),
            'modelo': forms.TextInput(attrs={'class': 'form-control', 'style': 'text-transform: uppercase;'}),
            'color': forms.TextInput(attrs={'class': 'form-control', 'style': 'text-transform: uppercase;'}),
            'placa_mtc': forms.TextInput(attrs={'class': 'form-control', 'style': 'text-transform: uppercase;'}),
            'ano': forms.NumberInput(attrs={'class': 'form-control'}),
            'serial_carroceria': forms.TextInput(attrs={'class': 'form-control', 'style': 'text-transform: uppercase;'}),
        }

    def clean(self):
        cleaned_data = super().clean()
        # Convertir todos los campos de texto a mayúsculas
        for field in ['placa_militar', 'clase', 'tipo', 'marca', 'modelo', 'color', 'placa_mtc', 'serial_carroceria']:
            if cleaned_data.get(field):
                cleaned_data[field] = cleaned_data[field].upper()
        return cleaned_data

    def save(self, commit=True):
        instance = super().save(commit=False)
        instance.tipo_vehiculo = "ADMINISTRATIVO"  # Predefinido en mayúsculas
        if commit:
            instance.save()
        return instance

class InventarioTacticoForm(forms.ModelForm):
    class Meta:
        model = InventarioTactico
        fields = ['placa_militar', 'tipo', 'modelo', 'marca', 'clase', 'color', 'placa_mtc', 'ano', 'serial_chasis', 'serial_motor']
        widgets = {
            'placa_militar': forms.TextInput(attrs={'class': 'form-control', 'style': 'text-transform: uppercase;'}),
            'tipo': forms.TextInput(attrs={'class': 'form-control', 'style': 'text-transform: uppercase;'}),
            'modelo': forms.TextInput(attrs={'class': 'form-control', 'style': 'text-transform: uppercase;'}),
            'marca': forms.TextInput(attrs={'class': 'form-control', 'style': 'text-transform: uppercase;'}),
            'clase': forms.TextInput(attrs={'class': 'form-control', 'style': 'text-transform: uppercase;'}),
            'color': forms.TextInput(attrs={'class': 'form-control', 'style': 'text-transform: uppercase;'}),
            'placa_mtc': forms.TextInput(attrs={'class': 'form-control', 'style': 'text-transform: uppercase;'}),
            'ano': forms.NumberInput(attrs={'class': 'form-control'}),
            'serial_chasis': forms.TextInput(attrs={'class': 'form-control', 'style': 'text-transform: uppercase;'}),
            'serial_motor': forms.TextInput(attrs={'class': 'form-control', 'style': 'text-transform: uppercase;'}),
        }

    def clean(self):
        cleaned_data = super().clean()
        # Convertir todos los campos de texto a mayúsculas
        for field in ['placa_militar', 'tipo', 'modelo', 'marca', 'clase', 'color', 'placa_mtc', 'serial_chasis', 'serial_motor']:
            if cleaned_data.get(field):
                cleaned_data[field] = cleaned_data[field].upper()
        return cleaned_data

    def save(self, commit=True):
        instance = super().save(commit=False)
        instance.tipo_vehiculo = "TÁCTICO"  # Predefinido en mayúsculas
        if commit:
            instance.save()
        return instance


class DirectoresForm(forms.ModelForm):
    class Meta:
        model = Directores
        fields = '__all__'

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for field in self.fields.values():
            field.widget.attrs.update({'class': 'form-control', 'required': ''})

class SubjefesForm(forms.ModelForm):
    class Meta:
        model = Subjefes
        fields = '__all__'

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for field in self.fields.values():
            field.widget.attrs.update({'class': 'form-select' if isinstance(field.widget, forms.Select) else 'form-control', 'required': ''})

class UnidadForm(forms.ModelForm):
    class Meta:
        model = Unidades
        fields = '__all__'

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['nombre'].widget.attrs.update({'class': 'form-control', 'required': ''})


class AsignacionAdministrativaForm(forms.ModelForm):
    vehiculos = forms.ModelMultipleChoiceField(
        queryset=InventarioAdministrativo.objects.filter(
            asignado=False,
            asignaciones_historial__isnull=True  # Excluir los que ya están en histórico
        ),
        widget=forms.SelectMultiple(attrs={'class': 'form-select', 'size': '5', 'id': 'vehiculos'}),
        label="Vehículos Administrativos"
    )

    class Meta:
        model = AsignacionAdministrativa
        fields = ['unidad', 'directores', 'jefes', 'comprobante']
        widgets = {
            'unidad': forms.Select(attrs={'class': 'form-select'}),
            'directores': forms.Select(attrs={'class': 'form-select'}),
            'jefes': forms.Select(attrs={'class': 'form-select'}),
            'comprobante': forms.TextInput(attrs={'class': 'form-control'}),
        }
        
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['vehiculos'].queryset = InventarioAdministrativo.objects.filter(asignado=False)


class AsignacionTacticaForm(forms.ModelForm):
    vehiculos = forms.ModelMultipleChoiceField(
        queryset=InventarioTactico.objects.filter(
            asignaciones_temporales__isnull=True,  # Excluir los que están en AsignacionTactica
            asignado=False  # Excluir los asignados actualmente
        ),
        widget=forms.SelectMultiple(attrs={'class': 'form-select', 'size': '5', 'id': 'vehiculos'}),
        label="Vehículos Tácticos"
    )

    class Meta:
        model = AsignacionTactica
        fields = ['unidad', 'directores', 'jefes', 'comprobante']
        widgets = {
            'unidad': forms.Select(attrs={'class': 'form-select'}),
            'directores': forms.Select(attrs={'class': 'form-select'}),
            'jefes': forms.Select(attrs={'class': 'form-select'}),
            'comprobante': forms.TextInput(attrs={'class': 'form-control'}),
        }