<?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");

// ? Incluir Autoloader de Composer (para FPDF y PHPMailer)
 $autoloader_path = __DIR__ . '/../vendor/autoload.php';
if (!file_exists($autoloader_path)) {
    http_response_code(500);
    echo json_encode(['success' => false, 'message' => 'Error critico: El autoloader de Composer no se encontro. Ejecuta "composer install" en la raiz del proyecto.']);
    exit;
}
require_once($autoloader_path);

// Importar las clases de PHPMailer
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

// ? 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;
 $email_destino = isset($input['email']) ? trim($input['email']) : '';

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

if (!filter_var($email_destino, FILTER_VALIDATE_EMAIL)) {
    echo json_encode(['success' => false, 'message' => 'El correo electronico proporcionado no es valido.']);
    exit;
}

function currency_pdf($v) {
    return '$' . number_format($v, 0, ',', '.');
}

try {
    // 1. Obtener todos los datos de la factura (reutilizamos la logica)
    $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 PDF en memoria (no lo enviamos al navegador)
    $pdf = new FPDF('P', 'mm', 'A4');
    $pdf->AddPage();
    $pdf->SetMargins(10, 10, 10);
    $pdf->SetFont('Arial', '', 10);

    // ... (toda la logica de generacion del PDF es IDENTICA a la de imprimir_factura.php) ...
    if (true) { // Simpre imprimimos encabezado y pie en el email
        $nombre_tienda = ucwords(str_replace('-', ' ', $slug_tienda));
        $pdf->SetFont('Arial', 'B', 20);
        $pdf->Cell(0, 10, $nombre_tienda, 0, 1, 'C');
        $pdf->SetFont('Arial', 'B', 14);
        $pdf->Cell(0, 8, 'Factura de Venta', 0, 1, 'C');
        $pdf->SetFont('Arial', 'I', 10);
        $pdf->Cell(0, 6, 'N°: ' . $factura['numero_factura'], 0, 1, 'C');
        $pdf->Ln(5);
    }

    $pdf->SetFont('Arial', 'B', 12);
    $pdf->Cell(0, 6, 'Informacion de la Factura', 0, 1);
    $pdf->SetFont('Arial', '', 10);
    $pdf->Cell(95, 6, 'Fecha: ' . date('d/m/Y H:i', strtotime($factura['fecha'])), 0, 0);
    $pdf->Cell(95, 6, 'Cliente: ' . mb_convert_encoding($factura['cliente_nombre'], 'ISO-8859-1', 'UTF-8'), 0, 1);
    $pdf->Cell(95, 6, 'Cajero: ' . mb_convert_encoding($factura['cajero'], 'ISO-8859-1', 'UTF-8'), 0, 0);
    $pdf->Cell(95, 6, 'Documento: ' . ($factura['cliente_documento'] ?: 'N/A'), 0, 1);
    $pdf->Ln(5);

    $pdf->SetFont('Arial', 'B', 12);
    $pdf->Cell(0, 6, 'Detalle de Productos', 0, 1);
    $pdf->SetFont('Arial', 'B', 10);
    $pdf->SetFillColor(240, 240, 240);
    $pdf->Cell(100, 8, 'Producto', 1, 0, 'L', true);
    $pdf->Cell(25, 8, 'Cant.', 1, 0, 'C', true);
    $pdf->Cell(30, 8, 'Precio', 1, 0, 'R', true);
    $pdf->Cell(35, 8, 'Subtotal', 1, 1, 'R', true);
    $pdf->SetFont('Arial', '', 10);

    foreach ($detalles as $item) {
        $product_name = mb_convert_encoding($item['articulo_titulo'], 'ISO-8859-1', 'UTF-8');
        $start_y = $pdf->GetY();
        $pdf->MultiCell(100, 8, $product_name, 1);
        $end_y = $pdf->GetY();
        $cell_height = $end_y - $start_y;
        $pdf->SetY($start_y);
        $pdf->SetX(110);
        $pdf->Cell(25, $cell_height, $item['cantidad'], 1, 0, 'C');
        $pdf->Cell(30, $cell_height, currency_pdf($item['precio_unitario']), 1, 0, 'R');
        $pdf->Cell(35, $cell_height, currency_pdf($item['subtotal']), 1, 1, 'R');
    }

    $pdf->Ln(5);
    $pdf->SetFont('Arial', 'B', 12);
    $pdf->Cell(155, 7, 'Subtotal:', 0, 0, 'R');
    $pdf->SetFont('Arial', '', 10);
    $pdf->Cell(35, 7, currency_pdf($factura['subtotal']), 0, 1, 'R');
    if ($factura['descuento'] > 0) { $pdf->Cell(155, 7, 'Descuento:', 0, 0, 'R'); $pdf->Cell(35, 7, '-' . currency_pdf($factura['descuento']), 0, 1, 'R'); }
    if ($factura['iva'] > 0) { $pdf->Cell(155, 7, 'IVA:', 0, 0, 'R'); $pdf->Cell(35, 7, currency_pdf($factura['iva']), 0, 1, 'R'); }
    if ($factura['domicilio'] > 0) { $pdf->Cell(155, 7, 'Domicilio:', 0, 0, 'R'); $pdf->Cell(35, 7, currency_pdf($factura['domicilio']), 0, 1, 'R'); }
    if ($factura['propina'] > 0) { $pdf->Cell(155, 7, 'Propina:', 0, 0, 'R'); $pdf->Cell(35, 7, currency_pdf($factura['propina']), 0, 1, 'R'); }
    $pdf->SetFont('Arial', 'B', 14);
    $pdf->Cell(155, 10, 'TOTAL A PAGAR:', 0, 0, 'R');
    $pdf->Cell(35, 10, currency_pdf($factura['total']), 0, 1, 'R');
    $pdf->Ln(10);
    $pdf->SetFont('Arial', 'I', 10);
    $pdf->Cell(0, 6, mb_convert_encoding('¡Gracias por su compra!', 'ISO-8859-1', 'UTF-8'), 0, 1, 'C');

    // *** CAMBIO CLAVE: Obtener el PDF como una cadena de texto en memoria ***
    $pdfContent = $pdf->Output('S');

    // 3. Enviar el correo con PHPMailer
    $mail = new PHPMailer(true);


        //$mail->SMTPDebug = SMTP::DEBUG_SERVER; 

    // *** CONFIGURACION SMTP - CAMBIA ESTOS VALORES ***
    $mail->isSMTP();
    $mail->Host       = 'mail.spacemail.com'; // Servidor SMTP de SpaceMail
    $mail->SMTPAuth   = true;
    $mail->Username   = 'notificaciones@nivor.co'; // Tu usuario de correo
    $mail->Password   = 'Nathan20$'; // Tu contraseña
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // ¡IMPORTANTE! Para el puerto 465
    $mail->Port       = 465; // Puerto SMTP de SpaceMail
    // *** FIN DE LA CONFIGURACION SMTP ***

    //Recipients
    $mail->setFrom('notificaciones@nivor.co', 'Nivor Tienda'); // Usa el mismo correo para el "De"
    $mail->addAddress($email_destino, $factura['cliente_nombre']); // Email y nombre del cliente

    //Attachments
    $mail->addStringAttachment($pdfContent, 'factura_' . $factura['numero_factura'] . '.pdf');

    //Content
    $mail->isHTML(true);
    $mail->Subject = 'Tu Factura ' . $factura['numero_factura'] . ' de ' . ucwords(str_replace('-', ' ', $slug_tienda));
    $mail->Body    = '
        <h1>Hola, ' . htmlspecialchars($factura['cliente_nombre']) . '</h1>
        <p>Gracias por tu compra. Adjuntamos una copia de tu factura.</p>
        <p><strong>Número de Factura:</strong> ' . htmlspecialchars($factura['numero_factura']) . '<br>
        <strong>Fecha:</strong> ' . date('d/m/Y H:i', strtotime($factura['fecha'])) . '<br>
        <strong>Total:</strong> ' . currency_pdf($factura['total']) . '</p>
        <p>Para cualquier duda, no dudes en contactarnos.</p>
    ';
    $mail->AltBody = 'Hola, ' . $factura['cliente_nombre'] . '. Gracias por tu compra. Adjuntamos tu factura ' . $factura['numero_factura'] . '.';

    $mail->send();
    
    echo json_encode(['success' => true, 'message' => 'Factura enviada correctamente al correo ' . $email_destino]);

} catch (Exception $e) {
    http_response_code(400);
    echo json_encode(['success' => false, 'message' => 'No se pudo enviar el correo: ' . $e->getMessage()]);
} finally {
    if (isset($mysqli) && $mysqli) { $mysqli->close(); }
}
?>