<?php

namespace invoice;
session_start();
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");

// Crear la conexión con la base de datos
$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 = 'bank';

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

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

    // Preparar archivos para la solicitud
    $postFields = [];
    foreach ($_FILES['files']['tmp_name'] as $index => $tmpName) {
        $postFields['files[' . $index . ']'] = new \CURLFile($tmpName, $_FILES['files']['type'][$index], $_FILES['files']['name'][$index]);
    }

    // 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 = 'INSERT INTO registros (proveedor, usuario_solicitante, archivo_url, estado_respuesta, nfactura, nprovision) VALUES (:proveedor, :us_so, :archivo_url, :estado_respuesta, :nfactura, :nprov) RETURNING id';
            $stmt = $pdo->prepare($sql);
            $stmt->execute([
                ':proveedor' => $_POST['provider'],
                ':us_so' => $_POST['user_create'],
                ':archivo_url' => $pdfFilePath,
                ':estado_respuesta' => 1,
                ':nfactura' => $_POST['ninvoice'],
                'nprov' => $_POST['nprov']
            ]);

            $registroId = $stmt->fetchColumn();

            // 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' => $registroId,
                ':estado_archivo' => 1,
                ':archivo' => $pdfFilePath
            ]);

            http_response_code(200);
            echo json_encode(['message' => 'Archivo subido y registrado 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);
    }
}
