from rest_framework.decorators import api_view
from server_backsemot.models import Comuna, Region, Ciudad
from server_backsemot.utiles import *
import sys


@api_view(["GET"])
def buscar_comuna_id(request):
    try:
        # Verifica si el ID de la comuna se proporciona en la solicitud
        if "id" not in request.GET:
            return Utiles.responder_500("Falta el id de la comuna")

        # Intenta obtener la comuna por ID
        comuna = Comuna.objects.get(id=request.GET["id"])

        # Prepara la respuesta
        respuesta = {
            "id": comuna.id,
            "nombre": comuna.nombreComuna
        }
        return Utiles.responder_200("Comuna encontrada", respuesta)
    
    except Comuna.DoesNotExist:
        return Utiles.responder_500("No existe comuna con ese id")
    except Exception:
        return Utiles.responder_500("Error", sys.exc_info())
    

    
@api_view(["GET"])
def buscar_comunas_region(request):
    try:
        region_id = request.GET.get("id")
        if not region_id:
            return Utiles.responder_500("Falta el id de la regi¨Žn")

        region = Region.objects.get(id=region_id)
        
        comunas = Comuna.objects.filter(region=region)
        if not comunas:
            return Utiles.responder_500("No hay comunas en esa regi¨Žn")

        resp = [{"id": c.id, "nombre": c.nombreComuna} for c in comunas]
        return Utiles.responder_200("Comunas", resp)
    
    except Region.DoesNotExist:
            return Utiles.responder_500("No existe regi¨Žn con ese id")
    except Exception:
        return Utiles.responder_500("Error", sys.exc_info())



@api_view(["GET"])
def listar_comunas(request):
    try:
        comunas = Comuna.objects.all().order_by("nombreComuna")
        if not comunas:
            return Utiles.responder_500("No hay comunas disponibles")

        resp = [{"id": c.id, "nombre": c.nombreComuna} for c in comunas]
        return Utiles.responder_200("Comunas", resp)

    except Exception:
        return Utiles.responder_500("Error", sys.exc_info())



@api_view(["GET"])
def listar_ciudades(request):
    try:
        ciudades = Ciudad.objects.all().order_by("nombre")
        if not ciudades:
            return Utiles.responder_500("No hay ciudades disponibles")
        
        resp = [{"id": c.id, "nombre": c.nombre} for c in ciudades]
        return Utiles.responder_200("Ciudades", resp)
    except Exception:
        return Utiles.responder_500("Error", sys.exc_info())    
    