import logging
from datetime import datetime
import sys
from typing import Any, Dict

sys.path.append('/var/www/html/config')

from cnxpdo import get_connection




def obtener_total_general_descargas() -> Dict[str, Any]:
    conexion = None
    cursor = None

    try:
        # Establecer la conexión a la base de datos
        conexion = get_connection()
        if conexion is None:
            return {
                "success": False,
                "message": "Error de conexión a la base de datos"
            }

        # Consulta para obtener el total de descargas
        query = """
            SELECT SUM(num_contador) AS total 
            FROM conteo_descargas_form_oficial
        """
        
        cursor = conexion.cursor(dictionary=True)
        cursor.execute(query)
        resultado = cursor.fetchone()

        # Devolver el resultado
        return {
            "success": True,
            "total": resultado["total"] if resultado["total"] is not None else 0
        }

    except Exception as e:
        logging.error(f"Error al obtener el total de descargas: {str(e)}")
        return {
            "success": False,
            "message": f"Error al obtener el total de descargas: {str(e)}"
        }

    finally:
        # Cerrar el cursor y la conexión
        if cursor:
            cursor.close()
        if conexion:
            conexion.close()


def registrar_descarga(data: dict):
    conexion = cursor = None
    try:
        nombre = data.get("nombre", "").strip()
        num_doc_identidad = data.get("num_doc_identidad", "").strip()
        clicks = int(data.get("num_contador", 1))

        if not nombre or not num_doc_identidad:
            return {
                "success": False,
                "message": "Nombre y número de documento son requeridos"
            }

        conexion = get_connection()
        if conexion is None:
            raise Exception("Error de conexión a la base de datos")

        cursor = conexion.cursor()
        query = """
            INSERT INTO conteo_descargas_form_oficial
            (nombre, num_doc_identidad, num_contador, fecha_hora)
            VALUES (%s, %s, %s, NOW())
        """
        cursor.execute(query, (nombre, num_doc_identidad, clicks))
        conexion.commit()

        return {
            "success": True,
            "message": "Descarga registrada exitosamente",
            "nombre": nombre,
            "num_doc_identidad": num_doc_identidad,
            "num_contador": clicks,
            "fecha_hora": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        }

    except Exception as e:
        logging.exception("Error en registrar_descarga")
        return {
            "success": False,
            "message": f"Error al registrar la descarga: {str(e)}"
        }

    finally:
        if cursor: cursor.close()
        if conexion: conexion.close()
