from django import forms
from .models import (
    ActaConsolidada,
    Equipo,
    CategoriaEquipo,
    Ubicacion,
    Departamento,
    Mantenimiento,
    Asignacion,
)

# --- FORMULARIO DE EQUIPO ---
class EquipoForm(forms.ModelForm):
    class Meta:
        model = Equipo
        fields = [
            # --- DATOS GENERALES Y DE GESTIÓN ---
            'numero_serie', 'nombre', 'estado', 'categoria', 'Ubicacion',
            'fecha_adquisicion', 'notas',
            # --- ESPECIFICACIONES DE HARDWARE ---
            'marca', 'modelo', 'disco_duro_tipo', 'disco_duro_capacidad_gb',
            'procesador_marca', 'procesador_tipo', 'procesador_velocidad_ghz',
            'ram_cantidad_gb', 'ram_tipo',
            # --- PERIFÉRICOS ASOCIADOS ---
            'teclado_marca', 'teclado_serial', 'mouse_marca', 'mouse_serial',
            'monitor_marca', 'monitor_modelo', 'monitor_serial',
            # --- GARANTIAS Y FACTURAS ---
            'factura', 'garantia_fin',
        ]
        widgets = {
            'fecha_adquisicion': forms.DateInput(attrs={'type': 'date'}),
            'notas': forms.Textarea(attrs={'rows': 3}),
            'garantia_fin': forms.DateInput(attrs={'type': 'date'}),

        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for field in self.fields.values():
            field.widget.attrs['class'] = 'form-control'
            if isinstance(field.widget, forms.DateInput):
                field.widget.input_type = 'date'

# --- FORMULARIO DE MANTENIMIENTO ---
class MantenimientoForm(forms.ModelForm):
    class Meta:
        model = Mantenimiento
        fields = [
            'equipo', 'fecha_mantenimiento', 'tipo_mantenimiento',
            'tecnico', 'descripcion', 'costo'
        ]
        widgets = {
            'fecha_mantenimiento': forms.DateInput(attrs={'type': 'date'}),
            'descripcion': forms.Textarea(attrs={'rows': 3}),
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for field in self.fields.values():
            existing_classes = field.widget.attrs.get('class', '')
            field.widget.attrs['class'] = f'{existing_classes} form-control'.strip()

# --- FORMULARIO DE DEPARTAMENTO ---
class DepartamentoForm(forms.ModelForm):
    class Meta:
        model = Departamento
        fields = ['nombre', 'descripcion']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['nombre'].widget.attrs['class'] = 'form-control'
        self.fields['descripcion'].widget.attrs['class'] = 'form-control'

# --- FORMULARIO DE UBICACIÓN ---
class UbicacionForm(forms.ModelForm):
    class Meta:
        model = Ubicacion
        fields = ['nombre', 'descripcion']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['nombre'].widget.attrs['class'] = 'form-control'
        self.fields['descripcion'].widget.attrs['class'] = 'form-control'

# --- FORMULARIO DE CATEGORÍA ---
class CategoriaForm(forms.ModelForm):
    class Meta:
        model = CategoriaEquipo
        fields = ['nombre', 'descripcion']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['nombre'].widget.attrs['class'] = 'form-control'
        self.fields['descripcion'].widget.attrs['class'] = 'form-control'

# --- FORMULARIO DE ASIGNACIÓN ---
class AsignacionForm(forms.ModelForm):
    class Meta:
        model = Asignacion
        # CORRECCIÓN: Se añade 'fecha_entrega_prevista' a la lista de campos.
        fields = ['usuario', 'notas', 'fecha_entrega_prevista']
        widgets = {
            # Se definen widgets específicos para ciertos campos.
            'fecha_entrega_prevista': forms.DateInput(attrs={'type': 'date'}),
            'notas': forms.Textarea(attrs={'rows': 3, 'placeholder': 'Añade notas adicionales si es necesario...'}),
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # Este bucle aplica la clase 'form-control' de Bootstrap a todos los campos.
        for field_name, field in self.fields.items():
            field.widget.attrs['class'] = 'form-control'
        
        # Hacemos que el campo de fecha de entrega no sea obligatorio.
        self.fields['fecha_entrega_prevista'].required = False
# --- FORMULARIO DE SUBIDA DE ARCHIVO ---
class FileUploadForm(forms.Form):
    file = forms.FileField(
        label="Selecciona un archivo CSV",
        widget=forms.ClearableFileInput(attrs={'class': 'form-control'})
    )

class ActaFirmadaUploadForm(forms.ModelForm):
    class Meta:
        model = ActaConsolidada
        fields = ['archivo_firmado']
        labels = { 'archivo_firmado': 'Seleccionar acta firmada' }