from django.db import connection
from common.utils import clean_sql_string, clean_sql_int


def get_status_action():
    """
    Acción simple para comprobar que la lógica de la API responde.
    """
    return {"status": "ok", "message": "API is running"}

def getData(params):
    """
    Función estándar para obtener datos de promociones.
    """
    # 1. Definimos la query con placeholders (%s)
    query = """
        SELECT id, nombre, fecha_inicio, descripcion 
        FROM promociones 
        WHERE id = %s AND activo = %s
    """
    
    
    # 2. Preparamos el diccionario de parámetros (tu estándar get_parameterized)
    # Limpiamos los datos antes de enviarlos a la base de datos
    id_promocion = clean_sql_int(params.get('id'))
    is_active = True if params.get('activo') else False
    
    parameter_dict = [id_promocion, is_active]

    # 3. Ejecución parametrizada
    with connection.cursor() as cursor:
        cursor.execute(query, parameter_dict)
        columns = [col[0] for col in cursor.description]
        result = [dict(zip(columns, row)) for row in cursor.fetchall()]

    return result

def setData(params):
    """
    Función estándar para insertar o actualizar (set_parameterized).
    """
    # Ejemplo de UPDATE con JOIN (como solicitaste en tu estándar)
    query = """
        UPDATE promociones p
        SET p.nombre = %s, p.fecha_modificacion = %s
        FROM categorias c
        WHERE p.categoria_id = c.id AND p.id = %s
    """
    
    # Fecha en formato YYYY-MM-DD para SQL
    import datetime
    fecha_hoy = datetime.datetime.now().strftime('%Y-%m-%d')
    
    parameter_dict = [
        clean_sql_string(params.get('nombre')),
        fecha_hoy,
        clean_sql_int(params.get('id'))
    ]

    with connection.cursor() as cursor:
        cursor.execute(query, parameter_dict)
        affected_rows = cursor.rowcount

    return affected_rows