<?php
// Inicia el buffer de salida para capturar cualquier carácter no deseado (como el BOM)
ob_start();

// ? Errores (quitar en producción)
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; }

// ? Conexión
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;
}

// --- VALIDACIÓN DE PARÁMETROS ---
 $slug_tienda = isset($input['slug_tienda']) ? trim($input['slug_tienda']) : '';
if ($slug_tienda === '') {
    echo json_encode(['success'=>false,'message'=>'El slug de la tienda es requerido.']);
    exit;
}

try {
    // --- 1. OBTENER RESUMEN ---
    $resumen = [
        'total_creditos' => 0,
        'total_pagado' => 0,
        'total_pendiente' => 0,
        'creditos_por_estado' => []
    ];

    // 1a. Totales generales de créditos (valor total y saldo pendiente)
    $stmt = $mysqli->prepare("
        SELECT 
            COALESCE(SUM(total_credito_con_interes), 0) as total_creditos,
            COALESCE(SUM(saldo_pendiente), 0) as total_pendiente
        FROM creditos
        WHERE slug_tienda = ?
    ");
    $stmt->bind_param("s", $slug_tienda);
    $stmt->execute();
    $totales = $stmt->get_result()->fetch_assoc();
    $stmt->close();
    $resumen['total_creditos'] = (float)$totales['total_creditos'];
    $resumen['total_pendiente'] = (float)$totales['total_pendiente'];

    // 1b. Total pagado (sumando todos los abonos de la tienda)
    $stmt = $mysqli->prepare("
        SELECT COALESCE(SUM(monto_abono), 0) as total_pagado
        FROM abonos_creditos
        WHERE slug_tienda = ?
    ");
    $stmt->bind_param("s", $slug_tienda);
    $stmt->execute();
    $pagado = $stmt->get_result()->fetch_assoc();
    $stmt->close();
    $resumen['total_pagado'] = (float)$pagado['total_pagado'];

    // 1c. Créditos agrupados por estado
    $stmt = $mysqli->prepare("
        SELECT 
            estado,
            COUNT(id) as count,
            COALESCE(SUM(total_credito_con_interes), 0) as total
        FROM creditos
        WHERE slug_tienda = ?
        GROUP BY estado
    ");
    $stmt->bind_param("s", $slug_tienda);
    $stmt->execute();
    $resumen['creditos_por_estado'] = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
    $stmt->close();

    // --- 2. OBTENER LISTADO DE CRÉDITOS ---
    $stmt = $mysqli->prepare("
        SELECT 
            c.id, 
            c.cliente_id,
            f.cliente_nombre, -- Se toma el nombre de la factura para mayor consistencia
            f.numero_factura,
            c.created_at as fecha_creacion,
            c.total_credito_con_interes,
            c.saldo_pendiente,
            c.estado
        FROM creditos c
        JOIN facturas f ON c.factura_id = f.id
        WHERE c.slug_tienda = ?
        ORDER BY c.created_at DESC
    ");
    $stmt->bind_param("s", $slug_tienda);
    $stmt->execute();
    $creditos = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
    $stmt->close();

    // --- 3. OBTENER LISTADO DE ABONOS ---
    $stmt = $mysqli->prepare("
        SELECT 
            id,
            credito_id,
            fecha_abono,
            monto_abono,
            metodo_abono
        FROM abonos_creditos
        WHERE slug_tienda = ?
        ORDER BY fecha_abono DESC
    ");
    $stmt->bind_param("s", $slug_tienda);
    $stmt->execute();
    $abonos = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
    $stmt->close();
    
    // --- 4. OBTENER LISTADO DE CLIENTES ---
    $stmt = $mysqli->prepare("
        SELECT 
            id,
            nombre
        FROM clientes
        WHERE slug_tienda = ?
        ORDER BY nombre ASC
    ");
    $stmt->bind_param("s", $slug_tienda);
    $stmt->execute();
    $clientes = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
    $stmt->close();

    // --- ENSAMBLAR RESPUESTA FINAL ---
    $response_data = [
        'success' => true,
        'data' => [
            'resumen' => $resumen,
            'creditos' => $creditos,
            'abonos' => $abonos,
            'clientes' => $clientes
        ]
    ];

    // Limpiar el buffer de salida (elimina el BOM y cualquier otro espacio/contenido)
    ob_end_clean();

    // Enviar la respuesta JSON limpia
    echo json_encode($response_data);

} catch (Exception $e) {
    // También es buena práctica limpiar el buffer antes de enviar un error
    ob_end_clean();
    http_response_code(500);
    echo json_encode(['success'=>false,'message'=>$e->getMessage()]);
} finally {
    if (isset($mysqli) && $mysqli) { $mysqli->close(); }
}
?>