import sys
import os

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

from cnxpdo import get_connection

import json


def obtenerCuentas():
    try:
        conexionBD = get_connection()
        if conexionBD is None:
            return json.dumps({"success": 0, "message": "Error de conexión"})
        
        cursor = conexionBD.cursor(dictionary=True)
        query = "SELECT * FROM cuenta_servicios"
        cursor.execute(query)
        datos_cuentas = cursor.fetchall()
        
        cursor.close()
        conexionBD.close()
        
        return {
            "success": 1,
            "message": "Datos obtenidos correctamente",
            "data": datos_cuentas
        }
    
    except Exception as e:
        return json.dumps({
            "success": 0,
            "message": f"Error al obtener datos de cuentas: {str(e)}"
        })

def insertarCuentaServicio(data):
    try:
        conexionBD = get_connection()
        if conexionBD is None:
            return {"success": 0, "message": "Error de conexión"}
        
        # Obtener los datos desde el input
        tipo_cuenta = data.get('tipo_cuenta')
        status = data.get('status')
        
        query = """
            INSERT INTO cuenta_servicios (tipo_cuenta, status) 
            VALUES (%s, %s)
        """
        
        cursor = conexionBD.cursor()
        cursor.execute(query, (tipo_cuenta, status))
        
        # Commit para confirmar la inserción
        conexionBD.commit()

        # No es necesario hacer un fetchAll porque estamos insertando datos,
        # pero podemos devolver la data pasada a la función
        cursor.close()
        conexionBD.close()

        return {"success": 1, "message": "Datos insertados correctamente", "data": data}
    
    except Exception as e:
        return {"success": 0, "message": f"Error al insertar datos: {str(e)}"}

def actualizarCuentaServicio(data):
    try:
        # Obtener conexión
        conexionBD = get_connection()

        if conexionBD is None:
            return {"success": 0, "message": "Error de conexión"}

        # Obtener los datos de entrada
        id = data['id']
        tipo_cuenta = data['tipo_cuenta']
        status = data['status']
        
        # Construir la consulta de actualización
        query = """
            UPDATE cuenta_servicios 
            SET tipo_cuenta = %s, status = %s 
            WHERE id = %s
        """
        
        # Ejecutar la consulta
        cursor = conexionBD.cursor()
        cursor.execute(query, (tipo_cuenta, status, id))
        
        # Confirmar la transacción
        conexionBD.commit()

        # Obtener los datos de las cuentas actualizadas (en caso necesario)
        cursor.execute("SELECT * FROM cuenta_servicios WHERE id = %s", (id,))
        datosCuentas = cursor.fetchall()

        cursor.close()
        conexionBD.close()

        return {
            "success": 1,
            "message": "Datos actualizados correctamente",
            "data": datosCuentas
        }

    except Exception as e:
        return {
            "success": 0,
            "message": f"Error al actualizar datos de cuentas: {str(e)}"
        }


def obtenerCuentasdeServicio(data):
    try:
        conexionBD = get_connection()
        if conexionBD is None:
            return {"success": 0, "message": "Error de conexión"}
        
        # Obtener el id_cuenta_servicio desde el input
        id_cuenta_servicio = data.get('id_cuenta')
        
        query = """
            SELECT * 
            FROM cuenta_servicios_datos 
            WHERE id_cuenta_servicio = %s
        """
        
        cursor = conexionBD.cursor(dictionary=True)
        cursor.execute(query, (id_cuenta_servicio,))
        datos_cuentas = cursor.fetchall()
        
        cursor.close()
        conexionBD.close()

        return {"success": 1, "message": "Datos obtenidos correctamente", "data": datos_cuentas}
    
    except Exception as e:
        return {"success": 0, "message": f"Error al obtener datos de cuentas: {str(e)}"}

def insertarCuentadeServicio(data):
    try:
        conexionBD = get_connection()
        if conexionBD is None:
            return {"success": 0, "message": "Error de conexión"}
        
        # Obtener los datos desde el input
        id_cuenta_servicio = data.get('id_cuenta')
        dato = data.get('dato')
        valor = data.get('valor')
        
        query = """
            INSERT INTO cuenta_servicios_datos (id_cuenta_servicio, dato, valor) 
            VALUES (%s, %s, %s)
        """
        
        cursor = conexionBD.cursor()
        cursor.execute(query, (id_cuenta_servicio, dato, valor))
        
        # Commit para confirmar la inserción
        conexionBD.commit()

        # No es necesario hacer un fetchAll porque estamos insertando datos, pero podemos devolver la data
        cursor.close()
        conexionBD.close()

        return {"success": 1, "message": "Datos insertados correctamente", "data": data}
    
    except Exception as e:
        return {"success": 0, "message": f"Error al insertar datos: {str(e)}"}

def actualizarCuentadeServicio(data):
    try:
        # Obtener conexión
        conexionBD = get_connection()

        if conexionBD is None:
            return {"success": 0, "message": "Error de conexión"}

        # Obtener los datos de entrada
        id_cuenta_servicio = data['id']
        dato = data['dato']
        valor = data['valor']

        # Construir la consulta de actualización
        query = """
            UPDATE cuenta_servicios_datos 
            SET dato = %s, valor = %s 
            WHERE id = %s
        """
        
        # Ejecutar la consulta
        cursor = conexionBD.cursor()
        cursor.execute(query, (dato, valor, id_cuenta_servicio))
        
        # Confirmar la transacción
        conexionBD.commit()

        # Obtener los datos actualizados (si es necesario)
        cursor.execute("SELECT * FROM cuenta_servicios_datos WHERE id_cuenta_servicio = %s", (id_cuenta_servicio,))
        datosCuentas = cursor.fetchall()

        cursor.close()
        conexionBD.close()

        return {
            "success": 1,
            "message": "Datos actualizados correctamente",
            "data": datosCuentas
        }

    except Exception as e:
        return {
            "success": 0,
            "message": f"Error al actualizar datos de cuenta de servicio: {str(e)}"
        }


