<?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 inválido']);
    exit;
}

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

if (!$slug_tienda || !$tipo_registro || !$id) {
    echo json_encode(['success' => false, 'message' => 'Faltan parámetros requeridos (slug_tienda, tipo_registro, id).']);
    exit;
}

try {
    $query = '';
    $params = [];
    $types = '';

    // --- CONSTRUCCION DE LA CONSULTA SEGUN EL TIPO DE REGISTRO ---
    switch ($tipo_registro) {
        case 'factura':
            // Selecciona la factura y sus detalles, uniendo con 'articulos' para obtener el nombre
            $query = "
                SELECT 
                    f.id, f.numero_factura, f.fecha, f.cliente_nombre, f.total, f.estado, f.cajero,
                    a.titulo AS producto_nombre, df.cantidad, df.precio_unitario, df.subtotal
                FROM facturas f
                LEFT JOIN factura_detalles df ON f.id = df.factura_id
                LEFT JOIN articulos a ON df.articulo_id COLLATE utf8mb4_unicode_ci = a.id -- <-- CAMBIO CLAVE: Forzar collation para el JOIN
                WHERE f.slug_tienda = ? AND f.id = ?
            ";
            $params = [$slug_tienda, $id];
            $types = 'si';
            break;

        case 'anulacion':
            $query = "
                SELECT 
                    id, numero_factura, fecha_anulacion, cliente_nombre, total, cajero_anulacion
                FROM historial_facturas_anuladas
                WHERE slug_tienda = ? AND id = ?
            ";
            $params = [$slug_tienda, $id];
            $types = 'si';
            break;

        case 'nota_credito':
            // Selecciona la nota de crédito, sus detalles y la factura original.
            $query = "
                SELECT 
                    nc.id, nc.numero_nota_credito, nc.fecha, nc.cliente_nombre, nc.total, nc.estado, nc.cajero, nc.motivo,
                    a.titulo AS producto_nombre, df.cantidad, df.precio_unitario, df.subtotal,
                    f.numero_factura AS factura_original_numero
                FROM notas_credito nc
                LEFT JOIN detalles_notas_credito df ON nc.id = df.nota_credito_id
                LEFT JOIN articulos a ON df.articulo_id COLLATE utf8mb4_unicode_ci = a.id -- <-- CAMBIO CLAVE: Forzar collation para el JOIN
                LEFT JOIN facturas f ON nc.factura_id_relacionada = f.id
                WHERE nc.slug_tienda = ? AND nc.id = ?
            ";
            $params = [$slug_tienda, $id];
            $types = 'si';
            break;

        case 'reversion_nota_credito':
            $query = "
                SELECT 
                    r.id, r.fecha_reversion, r.cajero_reversion,
                    nc.numero_nota_credito, nc.fecha AS fecha_nota_credito, nc.total AS total_nota_credito,
                    f.numero_factura AS factura_original_numero
                FROM reversiones_notas_credito r
                JOIN notas_credito nc ON r.nota_credito_id = nc.id
                JOIN facturas f ON nc.factura_id_relacionada = f.id
                WHERE f.slug_tienda = ? AND r.id = ?
            ";
            $params = [$slug_tienda, $id];
            $types = 'si';
            break;
        
        default:
            throw new Exception("Tipo de registro no válido.");
            break;
    }

    // --- EJECUCIÓN Y RESPUESTA ---
    $stmt = $mysqli->prepare($query);
    
    if (!$stmt) {
        throw new Exception("Error al preparar la consulta: " . $mysqli->error);
    }
    
    $stmt->bind_param($types, ...$params);
    
    if (!$stmt->execute()) {
        throw new Exception("Error al ejecutar la consulta: " . $stmt->error);
    }
    
    $result = $stmt->get_result();
    $detalle = null;

    // Estructurar los datos para la respuesta
    if ($tipo_registro === 'factura' || $tipo_registro === 'nota_credito') {
        $all_rows = $result->fetch_all(MYSQLI_ASSOC);
        if (!empty($all_rows)) {
            $detalle = [
                'header' => $all_rows[0],
                'items' => []
            ];
            if ($all_rows[0]['producto_nombre'] !== null) {
                $detalle['items'] = $all_rows;
            }
        }
    } else {
        $detalle = $result->fetch_assoc();
    }
    
    $stmt->close();

    if ($detalle) {
        echo json_encode(['success' => true, 'detalle' => $detalle]);
    } else {
        echo json_encode(['success' => false, 'message' => 'No se encontraron detalles para el registro especificado.']);
    }

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