<?php
// ? Errores (quitar en produccion)
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// ? CORS y Headers
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Content-Type");
header("Access-Control-Allow-Methods: POST, OPTIONS");
header("Content-Type: application/json; charset=utf-8");

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(200); exit; }

// ? Conexion
require_once(__DIR__ . '/../config.php');
 $mysqli->set_charset("utf8mb4");

// ? JSON
 $input = json_decode(file_get_contents('php://input'), true);
if (!$input) { 
    echo json_encode(['success'=>false,'message'=>'JSON invalido']); 
    exit; 
}

// --- VALIDACION DE PARAMETROS ---
 $slug_tienda = isset($input['slug_tienda']) ? trim($input['slug_tienda']) : '';
 $factura_id = isset($input['factura_id']) ? (int)$input['factura_id'] : 0;
 $tipo = isset($input['tipo']) ? trim($input['tipo']) : 'vista';

if (!$slug_tienda || !$factura_id) {
    echo json_encode(['success' => false, 'message' => 'Parametros invalidos.']);
    exit;
}

// Directorio donde se guardaran los duplicados (debe ser escribible por el servidor web)
 $directorio_duplicados = __DIR__ . '/../duplicados/';
if (!file_exists($directorio_duplicados)) {
    mkdir($directorio_duplicados, 0777, true);
}

try {
    // Iniciar transaccion para marcar la factura como duplicada
    $mysqli->begin_transaction();

    // 1. Obtener todos los datos necesarios de la factura
    $stmt_factura = $mysqli->prepare("SELECT f.*, cl.nombre as cliente_nombre, cl.numero_documento as cliente_documento FROM facturas f LEFT JOIN clientes cl ON f.cliente_id = cl.id WHERE f.id = ? AND f.slug_tienda = ?");
    $stmt_factura->bind_param("is", $factura_id, $slug_tienda);
    $stmt_factura->execute();
    $factura = $stmt_factura->get_result()->fetch_assoc();
    $stmt_factura->close();

    if (!$factura) {
        throw new Exception("Factura no encontrada.");
    }

    $stmt_detalles = $mysqli->prepare("SELECT fd.*, a.titulo as articulo_titulo FROM factura_detalles fd LEFT JOIN articulos a ON fd.articulo_id = a.id COLLATE utf8mb4_unicode_ci WHERE fd.factura_id = ?");
    $stmt_detalles->bind_param("i", $factura_id);
    $stmt_detalles->execute();
    $detalles = $stmt_detalles->get_result()->fetch_all(MYSQLI_ASSOC);
    $stmt_detalles->close();

    $stmt_pagos = $mysqli->prepare("SELECT medio_pago, monto FROM factura_pagos WHERE factura_id = ?");
    $stmt_pagos->bind_param("i", $factura_id);
    $stmt_pagos->execute();
    $pagos = $stmt_pagos->get_result()->fetch_all(MYSQLI_ASSOC);
    $stmt_pagos->close();

    // 2. Generar el contenido HTML del duplicado
    $nombre_tienda = ucwords(str_replace('-', ' ', $slug_tienda));
    $html_content = "
    <!DOCTYPE html>
    <html lang='es'>
    <head>
        <meta charset='UTF-8'>
        <title>Duplicado Factura {$factura['numero_factura']}</title>
        <style>
            body { font-family: Arial, sans-serif; margin: 40px; color: #333; }
            .header { text-align: center; border-bottom: 2px solid #eee; padding-bottom: 20px; margin-bottom: 20px; }
            .header h1 { margin: 0; }
            .duplicate-mark { color: red; font-weight: bold; font-size: 1.2em; }
            .info-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-bottom: 20px; }
            .info-section { background: #f9f9f9; padding: 15px; border-radius: 5px; }
            table { width: 100%; border-collapse: collapse; margin-bottom: 20px; }
            th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
            th { background-color: #f2f2f2; }
            .text-right { text-align: right; }
            .totals { text-align: right; font-size: 1.1em; }
            .footer { margin-top: 40px; text-align: center; font-size: 0.9em; color: #777; border-top: 1px solid #eee; padding-top: 20px; }
        </style>
    </head>
    <body>
        <div class='header'>
            <h1>{$nombre_tienda}</h1>
            <p>Duplicado de Factura de Venta</p>
            <p class='duplicate-mark'>COPIA NO VALIDA</p>
        </div>
        <div class='info-grid'>
            <div class='info-section'>
                <p><strong>Número de Factura:</strong> {$factura['numero_factura']}</p>
                <p><strong>Fecha y Hora:</strong> " . formatDate($factura['fecha']) . "</p>
                <p><strong>Cajero:</strong> {$factura['cajero']}</p>
            </div>
            <div class='info-section'>
                <p><strong>Cliente:</strong> {$factura['cliente_nombre']}</p>
                <p><strong>Documento:</strong> " . ($factura['cliente_documento'] ?: 'N/A') . "</p>
                <p><strong>Estado:</strong> " . ucfirst($factura['estado']) . "</p>
            </div>
        </div>
        <table>
            <thead>
                <tr>
                    <th>Producto</th>
                    <th class='text-right'>Cantidad</th>
                    <th class='text-right'>Precio Unit.</th>
                    <th class='text-right'>Subtotal</th>
                </tr>
            </thead>
            <tbody>";

    foreach ($detalles as $item) {
        $html_content .= "
                <tr>
                    <td>{$item['articulo_titulo']}</td>
                    <td class='text-right'>{$item['cantidad']}</td>
                    <td class='text-right'>" . currency($item['precio_unitario']) . "</td>
                    <td class='text-right'>" . currency($item['subtotal']) . "</td>
                </tr>";
    }

    $html_content .= "
            </tbody>
        </table>
        <div class='totals'>
            <p><strong>Subtotal:</strong> " . currency($factura['subtotal']) . "</p>";

    if ($factura['descuento'] > 0) {
        $html_content .= "<p><strong>Descuento:</strong> -" . currency($factura['descuento']) . "</p>";
    }
    if ($factura['iva'] > 0) {
        $html_content .= "<p><strong>IVA:</strong> " . currency($factura['iva']) . "</p>";
    }
    if ($factura['domicilio'] > 0) {
        $html_content .= "<p><strong>Domicilio:</strong> " . currency($factura['domicilio']) . "</p>";
    }
    if ($factura['propina'] > 0) {
        $html_content .= "<p><strong>Propina:</strong> " . currency($factura['propina']) . "</p>";
    }

    $html_content .= "
            <p style='font-size: 1.4em; border-top: 1px solid #ddd; padding-top: 10px;'><strong>Total a Pagar:</strong> " . currency($factura['total']) . "</p>
        </div>";

    if (!empty($pagos)) {
        $html_content .= "<h3>Métodos de Pago</h3><ul>";
        foreach ($pagos as $pago) {
            $html_content .= "<li>" . ucfirst($pago['medio_pago']) . ": " . currency($pago['monto']) . "</li>";
        }
        $html_content .= "</ul>";
    }

    $html_content .= "
        <div class='footer'>
            <p>Este duplicado fue generado el " . date('d/m/Y H:i:s') . "</p>
            <p>Para consultas, presente el original de la factura.</p>
        </div>
    </body>
    </html>";

    // 3. Guardar el HTML en un archivo
    $nombre_archivo = 'duplicado_' . $factura['numero_factura'] . '_' . date('YmdHis') . '.html';
    $ruta_archivo = $directorio_duplicados . $nombre_archivo;
    file_put_contents($ruta_archivo, $html_content);

    // 4. Marcar la factura como duplicada en la BD
    $stmt_update = $mysqli->prepare("UPDATE facturas SET duplicado_generado = NOW() WHERE id = ?");
    $stmt_update->bind_param("i", $factura_id);
    $stmt_update->execute();
    $stmt_update->close();

    // Confirmar transaccion
    $mysqli->commit();

    // 5. Construir la URL publica para el archivo
    $url_publica = "https://nivor.co/duplicados/" . $nombre_archivo; // Asegurate que esta URL sea correcta

    echo json_encode([
        'success' => true, 
        'message' => 'Duplicado generado correctamente.',
        'url' => $url_publica
    ]);

} catch (Exception $e) {
    $mysqli->rollback();
    http_response_code(400);
    echo json_encode(['success' => false, 'message' => $e->getMessage()]);
} finally {
    if (isset($mysqli) && $mysqli) { $mysqli->close(); }
}

// Funciones auxiliares para formatear dentro del PHP
function currency($v) {
    return number_format($v, 0, ',', '.') . ' COP';
}
function formatDate($dateString) {
    $date = new DateTime($dateString);
    return $date->format('d/m/Y H:i:s');
}
?>