﻿from django.shortcuts import render, redirect
from django.http import JsonResponse, HttpResponse
from django.conf import settings
from django.db.models import Prefetch
from django.views.decorators.http import require_http_methods
from django.db import IntegrityError, transaction 
import json
import os
# Importaciones de modelos
from .models import Usuario, Area, Empleado

def usuarios_view(request):
    return render(request, 'usuarios.html')


# ==============================================================================
# 1. Función para obtener Áreas (get_areas) - AJUSTADA
# ==============================================================================

def get_areas(request):
    """
    Obtiene la lista de Áreas y la retorna como JsonResponse.
    No requiere manejo de BigIntegerField.
    """
    areas = Area.objects.all()
    
    # Prepara la lista de diccionarios para serializar
    data = list(areas.values('id', 'nombre'))

    # Se mantiene simple ya que no hay campos complejos
    return JsonResponse(data, safe=False)


# ==============================================================================
# 2. Función para obtener Empleados (get_empleados) - AJUSTADA
# ==============================================================================

def get_empleados(request):
    """
    Obtiene la lista de Empleados y la retorna como JsonResponse.
    Asegura la serialización de BigIntegerField (docNumber).
    """
    empleados = Empleado.objects.all()
    
    # Prepara la lista de diccionarios
    data = []
    for empleado in empleados:
        data.append({
            'id': empleado.id, 
            'email': empleado.email, 
            'nombre': empleado.nombre, 
            'area': empleado.area, 
            'docType': empleado.docType, 
            'cargo': empleado.cargo, 
            'jefe': empleado.jefe, 
            'correo_jefe': empleado.correo_jefe, 
            # Convertir BigIntegerField a string
            'docNumber': str(empleado.docNumber) 
        })
    
    # Se usa la lista de diccionarios ya pre-serializados con str()
    return JsonResponse(data, safe=False)


# ==============================================================================
# 3. Función para obtener Usuarios (get_usuarios) - CORREGIDA
# ==============================================================================

def get_usuarios(request):
    """
    Obtiene la lista de Usuarios y retorna la data como JsonResponse.
    Maneja correctamente campos NULL en area, BigIntegerField (cc) y la URL de la imagen.
    """
    usuarios = Usuario.objects.select_related('area').all()
    
    # Construir lista manualmente para manejar NULL en ForeignKey y BigIntegerField
    data = []
    for usuario in usuarios:
        data.append({
            'id': usuario.id,
            'correo': usuario.correo,
            'tipo': usuario.tipo,
            'estado': usuario.estado,
            'cc': str(usuario.cc),
            'nombre': usuario.nombre,
            'token': usuario.token,
            # Campo corregido: se envía la URL, no el objeto Field.
            'img': f"{settings.MEDIA_URL}profile/{usuario.img}" if usuario.img else f"{settings.MEDIA_URL}profile/default.png", 
            'pais': usuario.pais,
            'ciudad': usuario.ciudad,
            'area_id': usuario.area.id if usuario.area else None,
            'area_nombre': usuario.area.nombre if usuario.area else None
        })
    
    return JsonResponse(data, safe=False)