<?php
session_start();
require_once '../includes/db.php';
require_once '../includes/factura_helper.php';
require_once '../includes/factura_db_helper.php';

if (!isset($_SESSION['usuario_id']) || $_SESSION['rol'] !== 'admin') {
    header('Location: login.php');
    exit;
}

try {
    $db = new Database();
    $pdo = $db->getPDO();

    if (!isset($_POST['cliente_id']) || !isset($_POST['venta_id'])) {
        throw new Exception("Faltan datos necesarios para generar la factura");
    }

    // Limpiar sesión
    unset($_SESSION['respuesta_servidor']);
    unset($_SESSION['respuesta_factura']);
    unset($_SESSION['pdf_url']);

    // Obtener configuración
    $stmtConfig = $pdo->prepare("SELECT * FROM configuracion_facturacion LIMIT 1");
    $stmtConfig->execute();
    $config = $stmtConfig->fetch(PDO::FETCH_ASSOC);

    // Generar datos
    $jsonData = generarJsonFactura($pdo, $_POST['cliente_id'], $_POST['venta_id'], $_SESSION['usuario_id']);

    // Preparar URL y datos
    $url = rtrim($config['dominio'], '/') . '/factuweb/';
    $postData = [
        'data' => json_encode([$jsonData]),
        'apiKey' => $config['api_key'],
        'tenantId' => $config['tenantid'],
        'email' => $config['email_empresa']
    ];

    // Enviar petición
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_POST => 1,
        CURLOPT_POSTFIELDS => http_build_query($postData),
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HEADER => false,
        CURLOPT_SSL_VERIFYPEER => true,
        CURLOPT_TIMEOUT => 30
    ]);

    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($response === false) {
        throw new Exception("Error de conexión: " . curl_error($ch));
    }

    // Verificar error de API
    if ($httpCode === 401 || $httpCode === 403) {
        $_SESSION['respuesta_servidor'] = [
            'tipo' => 'error',
            'fecha' => date('Y-m-d H:i:s'),
            'mensaje' => 'Error de autenticación: API Key inválida o no autorizada',
            'detalles' => [
                'API Key' => substr($config['api_key'], 0, 5) . '****',
                'Código' => $httpCode
            ]
        ];
        header('Location: facturar.php');
        exit;
    }

    // Procesar respuesta
    $lineas = explode("\n", trim($response));
    $datosRespuesta = [];
    foreach ($lineas as $linea) {
        if (strpos($linea, ':') !== false) {
            list($clave, $valor) = array_map('trim', explode(':', $linea, 2));
            $datosRespuesta[$clave] = $valor;
        }
    }

    if (!empty($datosRespuesta['CDC'])) {
        // Actualizar número de factura
        $pdo->prepare("UPDATE configuracion_facturacion SET factura_numero = factura_numero + 1")->execute();
        
        $_SESSION['respuesta_servidor'] = [
            'tipo' => 'success',
            'fecha' => date('Y-m-d H:i:s'),
            'datos' => $datosRespuesta,
            'respuesta_completa' => $response
        ];

        $urlPDF = $url . $config['tenantid'] . '/factura_' . $datosRespuesta['CDC'] . '.pdf';
        $_SESSION['pdf_url'] = $urlPDF;

        echo "<script>
              window.open('$urlPDF', '_blank');
              window.location.href = 'facturar.php';
              </script>";
        exit;
    }

    throw new Exception("No se pudo generar el PDF de la factura");

} catch (Exception $e) {
    $_SESSION['mensaje_error'] = $e->getMessage();
    error_log("Error en facturación: " . $e->getMessage());
    header('Location: facturar.php');
    exit;
}
