<?php

namespace serviciosms;

require_once __DIR__ . '/../../conexion_bbdd/vendor/autoload.php';
require_once __DIR__ . '/../../conexion_bbdd/Config/Database.php';
require_once __DIR__ . '/../../Logger.php';

use Utils\Database;
use Utils\Database_tesoreria;
use Utils\Logger;

// Permitir el acceso desde cualquier origen (para desarrollo)
header("Access-Control-Allow-Origin: *");

// Permitir métodos HTTP específicos
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");

// Permitir encabezados personalizados
header("Access-Control-Allow-Headers: Content-Type, Authorization");

// Encabezado para tipo de contenido JSON
header("Content-Type: application/json");

try {
    // Conexión a la base de datos
    $pdo = Database_tesoreria::conectar_tesoreria();

    // Consulta SQL con parámetro condicional
    $consulta = "
        SELECT 
            rg.id, 
            EXTRACT(YEAR FROM rg.fecha) AS anio, 
            TO_CHAR(rg.fecha, 'TMMonth') AS mes, 
            EXTRACT(DAY FROM rg.fecha) AS dia,
            TO_CHAR(rg.fecha, 'TMDay') AS dia_semana,
            rg.fecha,
            CONCAT('http://localhost/actualizacion/envioautomaticodecorreossmsmwsp/tesoreria/python_backend/', rg.archivo_url) AS archivo_url,
            rg.created_at, 
            rg.updated_at,
            rg.proveedor, 
            rg.banco, 
            rg.cuenta,
            rg.estado_respuesta,
            rg.nfactura,
            rg.nprovision,
            rg.usuario_solicitante,
            rg.usuario_respuesta,
        CASE 
            WHEN rg.estado_respuesta = 0 THEN 'Eliminado'
            WHEN rg.estado_respuesta = 1 THEN 'Solicitado'
            WHEN rg.estado_respuesta = 2 THEN 'Respondido'
            WHEN rg.estado_respuesta = 3 THEN 'Actualizado'
            ELSE 'Desconocido'
        END AS estado,
            COALESCE(au.cantidad, 0) AS cantidad
        FROM 
            registros rg
        LEFT JOIN 
            (SELECT id_registros, COUNT(*) AS cantidad 
            FROM archivo_url 
            GROUP BY id_registros) au
        ON rg.id = au.id_registros
        ORDER BY 
            rg.id DESC;";

    // Preparar la consulta
    $stmt = $pdo->prepare($consulta);
    $stmt->execute();
    $resultado = $stmt->fetchAll(\PDO::FETCH_ASSOC);

    // Estructurar los datos del cliente
    $datosFactura = [];
    foreach ($resultado as $fila) {
        $datosFactura[] = [
            'id' => $fila['id'],
            'año' => $fila['anio'],
            'mes' => $fila['mes'],
            'dia' => $fila['dia_semana'],
            'fecha' => $fila['fecha'],
            'archivo_url' => $fila['archivo_url'],
            'created_at' => $fila['created_at'],
            'proveedor' => $fila['proveedor'],
            'banco' => $fila['banco'],
            'cuenta' => $fila['cuenta'],
            'cantidad' => $fila['cantidad'],
            'estado' => $fila['estado'],
            'ninvoice' => $fila['nfactura'],
            'nprov' => $fila['nprovision'],
            'usuario_solicitante'=>$fila['usuario_solicitante'],
            'usuario_respuesta' => $fila['usuario_respuesta'],
        ];
    }
    
    // Devolver los resultados estructurados como JSON
    echo json_encode(['data' => $datosFactura]);

} catch (\PDOException $e) {
    $mensajeError = "Error al conectar con la base de datos: " . $e->getMessage();
    Logger::logError('ERROR', $mensajeError, __FILE__, __LINE__);
    echo json_encode(['success' => false, 'message' => 'Error ' . $mensajeError]);
} catch (\Exception $e) {
    $mensajeError = "Error no capturado: " . $e->getMessage();
    Logger::logError('ERROR', $mensajeError, __FILE__, __LINE__);
    echo json_encode(['success' => false, 'message' => 'Error ' . $mensajeError]);
}
?>
