<?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']) : '';
 $fecha_inicio = isset($input['fechaInicio']) ? trim($input['fechaInicio']) : null;
 $fecha_fin = isset($input['fechaFin']) ? trim($input['fechaFin']) : null;
 $estado_factura = isset($input['estado']) ? trim($input['estado']) : '';

if (!$slug_tienda) {
    echo json_encode(['success' => false, 'message' => 'El slug de la tienda es requerido.']);
    exit;
}

try {
    // --- 1. RESUMEN DE VENTAS ---
    $sql_ventas = "
        SELECT 
            COALESCE(SUM(subtotal), 0) AS subtotal_ventas,
            COALESCE(SUM(iva), 0) AS total_iva,
            COALESCE(SUM(domicilio), 0) AS total_domicilio,
            COALESCE(SUM(propina), 0) AS total_propina,
            COALESCE(SUM(total), 0) AS gran_total,
            COUNT(id) AS total_facturas
        FROM facturas 
        WHERE slug_tienda = ?
    ";
    $params_ventas = [$slug_tienda];
    $types_ventas = 's';

    if (!empty($estado_factura)) {
        $sql_ventas .= " AND estado = ?";
        $params_ventas[] = $estado_factura;
        $types_ventas .= 's';
    }
    if (!empty($fecha_inicio)) {
        $sql_ventas .= " AND fecha >= ?";
        $params_ventas[] = $fecha_inicio;
        $types_ventas .= 's';
    }
    if (!empty($fecha_fin)) {
        $sql_ventas .= " AND fecha <= ?";
        $params_ventas[] = $fecha_fin . ' 23:59:59';
        $types_ventas .= 's';
    }

    $stmt = $mysqli->prepare($sql_ventas);
    $stmt->bind_param($types_ventas, ...$params_ventas);
    $stmt->execute();
    $resumen_ventas = $stmt->get_result()->fetch_assoc();
    $stmt->close();

    // --- 2. RESUMEN DE NOTAS DE CRÉDITO ---
    $sql_notas = "
        SELECT 
            estado,
            COUNT(id) AS total_notas,
            COALESCE(SUM(total), 0) AS gran_total
        FROM notas_credito 
        WHERE slug_tienda = ?
    ";
    $params_notas = [$slug_tienda];
    $types_notas = 's';

    if (!empty($fecha_inicio)) {
        $sql_notas .= " AND fecha >= ?";
        $params_notas[] = $fecha_inicio;
        $types_notas .= 's';
    }
    if (!empty($fecha_fin)) {
        $sql_notas .= " AND fecha <= ?";
        $params_notas[] = $fecha_fin . ' 23:59:59';
        $types_notas .= 's';
    }
    $sql_notas .= " GROUP BY estado";

    $stmt = $mysqli->prepare($sql_notas);
    $stmt->bind_param($types_notas, ...$params_notas);
    $stmt->execute();
    $rows_notas = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
    $stmt->close();
    
    $resumen_notas_por_estado = [
        'emitida' => ['total_notas' => 0, 'gran_total' => 0],
        'aplicada' => ['total_notas' => 0, 'gran_total' => 0],
        'reversada' => ['total_notas' => 0, 'gran_total' => 0],
    ];
    foreach ($rows_notas as $row) {
        if (isset($resumen_notas_por_estado[$row['estado']])) {
            $resumen_notas_por_estado[$row['estado']] = [
                'total_notas' => (int)$row['total_notas'],
                'gran_total' => (float)$row['gran_total']
            ];
        }
    }

    // --- 3. RESUMEN DE CRÉDITOS Y ABONOS ---
    $sql_creditos = "
        SELECT 
            COALESCE(SUM(total), 0) AS total_credito_ventas
        FROM facturas 
        WHERE slug_tienda = ? AND estado = 'credito'
    ";
    $params_creditos = [$slug_tienda];
    $types_creditos = 's';
    if (!empty($fecha_inicio)) {
        $sql_creditos .= " AND fecha >= ?";
        $params_creditos[] = $fecha_inicio;
        $types_creditos .= 's';
    }
    if (!empty($fecha_fin)) {
        $sql_creditos .= " AND fecha <= ?";
        $params_creditos[] = $fecha_fin . ' 23:59:59';
        $types_creditos .= 's';
    }
    $stmt = $mysqli->prepare($sql_creditos);
    $stmt->bind_param($types_creditos, ...$params_creditos);
    $stmt->execute();
    $total_credito_ventas = (float) $stmt->get_result()->fetch_assoc()['total_credito_ventas'];
    $stmt->close();

    $sql_abonos = "
        SELECT COALESCE(SUM(monto_abono), 0) AS total_abonos_recibidos
        FROM abonos_creditos
        WHERE slug_tienda = ?
    ";
    $params_abonos = [$slug_tienda];
    $types_abonos = 's';
    if (!empty($fecha_inicio)) {
        $sql_abonos .= " AND fecha_abono >= ?";
        $params_abonos[] = $fecha_inicio;
        $types_abonos .= 's';
    }
    if (!empty($fecha_fin)) {
        $sql_abonos .= " AND fecha_abono <= ?";
        $params_abonos[] = $fecha_fin . ' 23:59:59';
        $types_abonos .= 's';
    }
    $stmt = $mysqli->prepare($sql_abonos);
    $stmt->bind_param($types_abonos, ...$params_abonos);
    $stmt->execute();
    $total_abonos_recibidos = (float) $stmt->get_result()->fetch_assoc()['total_abonos_recibidos'];
    $stmt->close();
    
    $saldo_pendiente_cobro = $total_credito_ventas - $total_abonos_recibidos;
    
    $resumen_creditos = [
        'total_credito_ventas' => $total_credito_ventas,
        'total_abonos_recibidos' => $total_abonos_recibidos,
        'saldo_pendiente_cobro' => $saldo_pendiente_cobro,
    ];
    
    // --- RESPUESTA FINAL ---
    echo json_encode([
        'success' => true, 
        'resumen' => [
            'resumen_ventas' => $resumen_ventas,
            'resumen_notas_credito' => $resumen_notas_por_estado,
            'resumen_creditos' => $resumen_creditos,
        ]
    ]);

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