<?php

namespace invoice;

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

use Utils\Database_tesoreria;
use Utils\Logger;

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization");

$id_espera = isset($_POST['id']) ? intval($_POST['id']) : null;
$url_espera = isset($_POST['urls']) ? $_POST['urls'] : null; // No usar intval para una URL

if ($id_espera === null) {
    echo json_encode(['message' => 'ID no proporcionados.']);
    http_response_code(400); // Bad Request
    exit;
}

if ($url_espera === null) {
    echo json_encode(['message' => 'URL no proporcionados.']);
    http_response_code(400); // Bad Request
    exit;
}

// Crear la conexión con la base de datos
//echo 'Esta es la url que se espera tener: '.$url_espera;
//echo 'Este es el id de espera: '.$id_espera;
$pdo = Database_tesoreria::conectar_tesoreria();

// Ruta base para los uploads
$baseUploadDir = 'uploads/';
$yearDir = $baseUploadDir . date('Y') . '/';
$monthDir = $yearDir . date('m') . '/';
$dayDir = $monthDir . date('d') . '/';
$bankDir = $dayDir . 'bank' . '/';

// Asegurarse de que las carpetas existan
ensureDirectory($yearDir);
ensureDirectory($monthDir);
ensureDirectory($dayDir);
ensureDirectory($bankDir);

// Procesar archivos
if (isset($_FILES['filesAgregarResp'])) {
    // Crear un recurso cURL
    $ch = curl_init();

    // Preparar archivos para la solicitud
    $postFields = [];
    foreach ($_FILES['filesAgregarResp']['tmp_name'] as $index => $tmpName) {
        $postFields['files[' . $index . ']'] = new \CURLFile($tmpName, $_FILES['filesAgregarResp']['type'][$index], $_FILES['filesAgregarResp']['name'][$index]);
    }
    $postFields['urls'] = $url_espera;
    // Configurar la solicitud cURL
    curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1:5000/upload');
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    // Ejecutar la solicitud y obtener la respuesta
    $response = curl_exec($ch);
    $error = curl_error($ch);

    // Cerrar el recurso cURL
    curl_close($ch);

    if ($error) {
        echo 'Error en la solicitud cURL: ' . $error;
    } else {
        // Decodificar la respuesta JSON
        $responseBody = json_decode($response, true);

        // Imprimir la respuesta JSON para depuración
        //echo "Esta es la respuesta:<br>";
        //print_r($responseBody);

        // Extraer la URL del PDF de la respuesta
        if (isset($responseBody['pdf_url'])) {
            $pdfFilePath = $responseBody['pdf_url'];

            // Insertar registro en la base de datos
            $sql = 'UPDATE registros SET fecha=:fecha_resp, banco=:banco_resp, cuenta=:cuenta_resp, usuario_respuesta = :us_res, archivo_url =:archivo, estado_respuesta=2 WHERE id = :id_regis';
            $stmt = $pdo->prepare($sql);
            $stmt->bindParam(':fecha_resp', $_POST['date']);
            $stmt->bindParam(':banco_resp', $_POST['bank']);
            $stmt->bindParam(':cuenta_resp', $_POST['account']);
            $stmt->bindParam(':us_res', $_POST['users']);
            $stmt->bindParam(':archivo', $pdfFilePath);
            $stmt->bindParam(':id_regis', $id_espera);
            $stmt->execute();

            // Insertar archivo_url
            $sql = 'INSERT INTO archivo_url ( id_registros, estado_archivo, archivo) VALUES (:id_registros, :estado_archivo, :archivo)';
            $stmt = $pdo->prepare($sql);
            $stmt->execute([
                ':id_registros' => $id_espera,
                ':estado_archivo' => 1,
                ':archivo' => $pdfFilePath
            ]);

            http_response_code(200);
            echo json_encode(['message' => 'Archivo subido y Actualizado exitosamente.']);
        } else {
            echo 'Error al procesar archivos.';
        }
    }
} else {
    echo 'No se han enviado archivos.';
}

// Función para crear carpetas si no existen
function ensureDirectory($path) {
    if (!is_dir($path)) {
        mkdir($path, 0755, true);
    }
}
