from rest_framework import serializers
from .models import Proyecto, ProyectoDireccion, UnidadDeMedida, HorarioActivo, SLA, Equipo
from clientes.models import Persona, Region, Comuna

class PersonaSerializer(serializers.ModelSerializer):
    class Meta:
        model = Persona
        fields = ['id', 'razonSocial', 'rut']

class RegionSerializer(serializers.ModelSerializer):
    id = serializers.CharField(source='codigo')
    class Meta:
        model = Region
        fields = ['id', 'nombre']

class ComunaSerializer(serializers.ModelSerializer):
    id = serializers.CharField(source='codigo')
    class Meta:
        model = Comuna
        fields = ['id', 'nombre']




class ProyectoDireccionSerializer(serializers.ModelSerializer):
    proyecto = serializers.PrimaryKeyRelatedField(queryset=Proyecto.objects.all())
    
    # Campos para lectura (GET)
    region = RegionSerializer(read_only=True)
    comuna = ComunaSerializer(read_only=True)  # Ahora usa el ComunaSerializer actualizado
    
    # Campos para escritura (POST/PUT)
    region_id = serializers.SlugRelatedField(
        queryset=Region.objects.all(),
        slug_field='codigo',
        source='region',
        write_only=True
    )
    
    comuna_id = serializers.SlugRelatedField(
        queryset=Comuna.objects.all(),
        slug_field='codigo',
        source='comuna',
        write_only=True
    )

    class Meta:
        model = ProyectoDireccion
        fields = [
            'id',
            'proyecto',
            'region',
            'comuna',
            'region_id',
            'comuna_id',
            'direccion',
            'contacto',
            'cantidadEquipos'
        ]
        extra_kwargs = {
            'proyecto': {'required': True}
        }


class UnidadDeMedidaSerializer(serializers.ModelSerializer):
    proyecto = serializers.PrimaryKeyRelatedField(queryset=Proyecto.objects.all())
    
    class Meta:
        model = UnidadDeMedida
        fields = '__all__'

class HorarioActivoSerializer(serializers.ModelSerializer):
    proyecto = serializers.PrimaryKeyRelatedField(queryset=Proyecto.objects.all())
    
    class Meta:
        model = HorarioActivo
        fields = '__all__'

class SLASerializer(serializers.ModelSerializer):
    proyecto = serializers.PrimaryKeyRelatedField(queryset=Proyecto.objects.all())
    zona = RegionSerializer(read_only=True)
    zona_id = serializers.PrimaryKeyRelatedField(
        queryset=Region.objects.all(), 
        source='zona',
        write_only=True
    )
    unidad_medida = serializers.PrimaryKeyRelatedField(queryset=UnidadDeMedida.objects.all())
    
    class Meta:
        model = SLA
        fields = '__all__'



class EquipoSerializer(serializers.ModelSerializer):
    proyecto = serializers.PrimaryKeyRelatedField(queryset=Proyecto.objects.all())
    ubicacion = serializers.PrimaryKeyRelatedField(
        queryset=ProyectoDireccion.objects.all(), 
        allow_null=True
    )
    
    class Meta:
        model = Equipo
        fields = '__all__'


# serializers.py
class RegionDetalleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Region
        fields = ['codigo', 'nombre']



class ProyectoSerializer(serializers.ModelSerializer):
    clienteMandante = serializers.PrimaryKeyRelatedField(queryset=Persona.objects.all())
    clienteFinal = serializers.PrimaryKeyRelatedField(queryset=Persona.objects.all())
    direcciones = ProyectoDireccionSerializer(many=True, read_only=True)
    class Meta:
        model = Proyecto
        fields = '__all__'
        read_only_fields = ['id']

    def to_representation(self, instance):
        rep = super().to_representation(instance)
        rep['clienteMandante'] = PersonaSerializer(instance.clienteMandante).data
        rep['clienteFinal'] = PersonaSerializer(instance.clienteFinal).data
        return rep