# hel_desk.py
import sys
import os
from datetime import datetime

# Agrega la ruta absoluta al sys.path
sys.path.append('/var/www/html/config')

from cnxpdo import get_connection

from datetime import datetime
import hashlib

def obtenerDatosMesaAyuda():
    conexionBD = get_connection()
    if conexionBD is None:
        return {
            'success': 0,
            'message': 'Error de conexión'
        }

    try:
        # Consulta SQL para obtener los datos de la mesa de ayuda con la información del ciudadano
        query = """
          SELECT 
                mesa_ayuda.id AS id_reporte,
                mesa_ayuda.id_ciudadano,
                mesa_ayuda.asunto,
                mesa_ayuda.descripcion,
                mesa_ayuda.archivo,
                mesa_ayuda.respuesta,
                mesa_ayuda.id_empleado,
                mesa_ayuda.status,
                ciudadanos.nombres,
                ciudadanos.apellidos,
                ciudadanos.tipo_doc_ident,
                ciudadanos.num_doc_ident,
                ciudadanos.correo
            FROM 
                mesa_ayuda
            INNER JOIN 
                ciudadanos 
            ON 
                mesa_ayuda.id_ciudadano = ciudadanos.id
            order by
            	mesa_ayuda.id desc 

        """
        cursor = conexionBD.cursor(dictionary=True)
        cursor.execute(query)
        datosMesaAyuda = cursor.fetchall()

        # Si algún valor es nulo, lo sustituimos por una cadena vacía
        for dato in datosMesaAyuda:
            for key, value in dato.items():
                if value is None:
                    dato[key] = ""

        cursor.close()
        conexionBD.close()

        return {
            'success': 1,
            'message': 'Datos obtenidos correctamente',
            'data': datosMesaAyuda
        }

    except Exception as e:
        cursor.close()
        conexionBD.close()
        return {
            'success': 0,
            'message': f"Error al obtener datos de la mesa de ayuda: {str(e)}"
        }

def actualizarMesaAyuda(data):
    conexionBD = get_connection()
    if conexionBD is None:
        return {
            "success": 0,
            "message": "Error de conexión"
        }

    try:
        # Verificar que exista el id_reporte
        if "id_reporte" in data and data["id_reporte"]:
            # Verificar que los campos requeridos no estén vacíos
            if "respuesta" in data and data["respuesta"] and "id_empleado" in data and data["id_empleado"] and "status" in data and data["status"]:


                # Convertir la fecha a formato MySQL
                try:
                    fecha_iso = data["fecha_respuesta"]
                    fecha_mysql = datetime.fromisoformat(fecha_iso.replace("Z", "+00:00")).strftime('%Y-%m-%d %H:%M:%S')
                except Exception as e:
                    return {
                        "success": 0,
                        "message": f"Error en el formato de fecha: {str(e)}"
                    }
                
                # Preparar la consulta
                query = """
                    UPDATE mesa_ayuda 
                    SET respuesta = %s,
                        id_empleado = %s,
                        status = %s,
                        fecha_respuesta = %s
                    WHERE id = %s
                """
                cursor = conexionBD.cursor()
                cursor.execute(query, (
                    data["respuesta"], 
                    data["id_empleado"], 
                    data["status"], 
                    fecha_mysql,
                    data["id_reporte"]
                ))
                conexionBD.commit()
                cursor.close()
                conexionBD.close()

                return {
                    "success": 1,
                    "message": "Reporte actualizado correctamente",
                    "data": data
                }
            else:
                return {
                    "success": 0,
                    "message": "Datos incompletos. Se requiere respuesta, id_empleado y status"
                }
        else:
            return {
                "success": 0,
                "message": "ID de reporte no proporcionado"
            }

    except Exception as e:
        return {
            "success": 0,
            "message": f"Error en la actualización: {str(e)}"
        }

def obtenerAdjuntosMesaAyuda(data):
    conexionBD = get_connection()
    if conexionBD is None:
        return {
            "success": 0,
            "message": "Error de conexión"
        }

    try:
        # Verificar que exista el id_mesa_ayuda
        if "id_mesa_ayuda" in data and data["id_mesa_ayuda"]:
            # Preparar la consulta
            query = """
                SELECT 
                    id, 
                    id_mesa_ayuda, 
                    nombre_archivo, 
                    extension, 
                    tipo, 
                    fecha_creacion 
                FROM 
                    mesa_ayuda_adjuntos 
                WHERE 
                    id_mesa_ayuda = %s
            """
            cursor = conexionBD.cursor(dictionary=True)
            cursor.execute(query, (data["id_mesa_ayuda"],))
            result = cursor.fetchall()

            cursor.close()
            conexionBD.close()

            # Verificar si se encontraron resultados
            if result:
                return {
                    "success": 1,
                    "message": "Adjuntos obtenidos correctamente",
                    "data": result
                }
            else:
                return {
                    "success": 0,
                    "message": "No se encontraron adjuntos para el ID proporcionado"
                }
        else:
            return {
                "success": 0,
                "message": "ID de mesa de ayuda no proporcionado"
            }

    except Exception as e:
        return {
            "success": 0,
            "message": f"Error al obtener adjuntos: {str(e)}"
        }
