from django.shortcuts import render
from rest_framework import viewsets
from .models import Persona, Contacto
from .serializers import PersonaSerializer, ContactoSerializer
from rest_framework import viewsets
from .models import Region
from .serializers import RegionSerializer
from rest_framework.response import Response
from .models import Comuna
from .serializers import ComunaSerializer
from rest_framework import viewsets, status
from rest_framework.decorators import action

class ComunaViewSet(viewsets.ModelViewSet):
    queryset = Comuna.objects.all()
    serializer_class = ComunaSerializer


class RegionViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = Region.objects.all()
    serializer_class = RegionSerializer
    pagination_class = None
    
    def get_queryset(self):
        queryset = Region.objects.all()
        es_region_param = self.request.query_params.get('es_region')
        if es_region_param is not None:
            if es_region_param.lower() == 'true':
                queryset = queryset.filter(es_region=True)
            elif es_region_param.lower() == 'false':
                queryset = queryset.filter(es_region=False)
        return queryset


import logging
logger = logging.getLogger(__name__)

from rest_framework import viewsets, status, filters
from rest_framework.response import Response
from django.db.models import Q
from .models import Persona
from .serializers import PersonaSerializer

class PersonaViewSet(viewsets.ModelViewSet):
    queryset = Persona.objects.order_by('-created_at')
    serializer_class = PersonaSerializer
    filter_backends = [filters.SearchFilter]
    search_fields = ['rut', 'razonSocial', 'nombreFantasia']

    def create(self, request, *args, **kwargs):
        rut = request.data.get('rut')
      

        if rut and Persona.objects.filter(rut=rut).exists():
            return Response(
                {'error': f'El RUT {rut} ya está registrado.'},
                status=status.HTTP_400_BAD_REQUEST
            )

        return super().create(request, *args, **kwargs)

    def update(self, request, *args, **kwargs):
        rut = request.data.get('rut')
        persona_id = self.get_object().id  # Obtenemos el ID del objeto actual
      

        if rut and Persona.objects.filter(rut=rut).exclude(id=persona_id).exists():
            return Response(
                {'error': f'El RUT {rut} ya está registrado en otro usuario.'},
                status=status.HTTP_400_BAD_REQUEST
            )

        return super().update(request, *args, **kwargs)




from rest_framework import viewsets, status
from rest_framework.response import Response
from rest_framework.decorators import action
from .models import Contacto
from .serializers import ContactoSerializer

from rest_framework import viewsets, status
from rest_framework.response import Response
from rest_framework.decorators import action
from .models import Contacto
from .serializers import ContactoSerializer

class ContactoViewSet(viewsets.ModelViewSet):
    queryset = Contacto.objects.all()
    serializer_class = ContactoSerializer

    def create(self, request, *args, **kwargs):
    
        persona_id = request.data.get('persona')
        if not persona_id:
            return Response({"error": "Persona es requerida"}, status=status.HTTP_400_BAD_REQUEST)
        return super().create(request, *args, **kwargs)

    @action(detail=True, methods=['put'])
    def update_contacto(self, request, pk=None):
        contacto = self.get_object()
     
        serializer = ContactoSerializer(contacto, data=request.data, partial=True)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    

   