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

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

try {
    // 1. Obtener datos de la factura
    // Se usa COLLATE para forzar la colacion y evitar el error de mezcla ilegal
    $stmt = $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 COLLATE utf8mb4_unicode_ci WHERE f.id = ? AND f.slug_tienda = ?");
    $stmt->bind_param("is", $factura_id, $slug_tienda);
    $stmt->execute();
    $factura = $stmt->get_result()->fetch_assoc();
    $stmt->close();

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

    // 2. Obtener los detalles de los productos
    // Se usa COLLATE para consistencia, aunque aqui es menos probable que haya error
    $stmt = $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->bind_param("i", $factura_id);
    $stmt->execute();
    $detalles = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
    $stmt->close();

    // 3. Obtener los metodos de pago
    $stmt = $mysqli->prepare("SELECT * FROM factura_pagos WHERE factura_id = ?");
    $stmt->bind_param("i", $factura_id);
    $stmt->execute();
    $pagos = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
    $stmt->close();

    // 4. Calcular total pagado (sumando pagos)
    $total_pagado = array_sum(array_column($pagos, 'monto'));

    echo json_encode([
        'success' => true,
        'factura' => $factura,
        'detalles' => $detalles,
        'pagos' => $pagos,
        'total_pagado' => $total_pagado
    ]);

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