<?php
/**
 * API: Obtener Detalle de Cierre de Caja
 * Sistema Sufarma
 */

header('Content-Type: application/json');
require_once '../../db_connection.php';
require_once '../../includes/functions/inventario_helpers.php';

try {
    $sucursal_id = obtenerSucursalActiva();
    
    // Check if session ID is passed, otherwise get active session
    $sesion_id = isset($_GET['sesion_id']) ? (int)$_GET['sesion_id'] : null;
    
    if (!$sesion_id) {
        // Find active session for active sucursal
        $findSql = "SELECT id FROM caja_sesiones WHERE sucursal_id = :sucursal_id AND estado = 'abierta' ORDER BY id DESC LIMIT 1";
        $findStmt = $pdo->prepare($findSql);
        $findStmt->execute(['sucursal_id' => $sucursal_id]);
        $res = $findStmt->fetch();
        if (!$res) {
            throw new Exception("No hay ninguna sesión de caja activa para esta sucursal.");
        }
        $sesion_id = (int)$res['id'];
    }
    
    // Get session base info
    $sqlSesion = "SELECT cs.*, u.nombre as nombre_usuario 
                  FROM caja_sesiones cs
                  JOIN usuarios u ON cs.usuario_id = u.id
                  WHERE cs.id = :sesion_id";
    $stmtSesion = $pdo->prepare($sqlSesion);
    $stmtSesion->execute(['sesion_id' => $sesion_id]);
    $sesion = $stmtSesion->fetch();
    
    if (!$sesion) {
        throw new Exception("La sesión de caja especificada no existe.");
    }
    
    // Sumar ventas en efectivo
    $ventasEfectivoStmt = $pdo->prepare("SELECT SUM(COALESCE(monto_efectivo, 0)) as total_efectivo FROM ventas WHERE caja_sesion_id = :sesion_id");
    $ventasEfectivoStmt->execute(['sesion_id' => $sesion_id]);
    $ve = $ventasEfectivoStmt->fetch();
    $ventas_efectivo = $ve ? floatval($ve['total_efectivo']) : 0;
    
    // Sumar ventas con tarjeta
    $ventasTarjetaStmt = $pdo->prepare("SELECT SUM(COALESCE(monto_tarjeta, 0)) as total_tarjeta FROM ventas WHERE caja_sesion_id = :sesion_id");
    $ventasTarjetaStmt->execute(['sesion_id' => $sesion_id]);
    $vt = $ventasTarjetaStmt->fetch();
    $ventas_tarjeta = $vt ? floatval($vt['total_tarjeta']) : 0;
    
    // Sumar ventas totales
    $ventasTotalStmt = $pdo->prepare("SELECT SUM(total) as total_ventas FROM ventas WHERE caja_sesion_id = :sesion_id");
    $ventasTotalStmt->execute(['sesion_id' => $sesion_id]);
    $vtot = $ventasTotalStmt->fetch();
    $ventas_total = $vtot ? floatval($vtot['total_ventas']) : 0;
    
    // Sumar ingresos extras
    $ingresosStmt = $pdo->prepare("SELECT SUM(monto) as total_ingresos FROM caja_movimientos WHERE sesion_id = :sesion_id AND tipo = 'ingreso'");
    $ingresosStmt->execute(['sesion_id' => $sesion_id]);
    $ing = $ingresosStmt->fetch();
    $ingresos_extras = $ing ? floatval($ing['total_ingresos']) : 0;
    
    // Sumar egresos
    $egresosStmt = $pdo->prepare("SELECT SUM(monto) as total_egresos FROM caja_movimientos WHERE sesion_id = :sesion_id AND tipo = 'egreso'");
    $egresosStmt->execute(['sesion_id' => $sesion_id]);
    $egr = $egresosStmt->fetch();
    $egresos = $egr ? floatval($egr['total_egresos']) : 0;
    
    $monto_apertura = floatval($sesion['monto_apertura']);
    $saldo_esperado = $monto_apertura + $ventas_efectivo + $ingresos_extras - $egresos;
    
    echo json_encode([
        'success' => true,
        'sesion' => [
            'id' => (int)$sesion['id'],
            'usuario_id' => (int)$sesion['usuario_id'],
            'nombre_usuario' => $sesion['nombre_usuario'],
            'sucursal_id' => (int)$sesion['sucursal_id'],
            'fecha_apertura' => $sesion['fecha_apertura'],
            'fecha_cierre' => $sesion['fecha_cierre'],
            'estado' => $sesion['estado'],
            'monto_apertura' => $monto_apertura,
            'ventas_efectivo' => $ventas_efectivo,
            'ventas_tarjeta' => $ventas_tarjeta,
            'ventas_total' => $ventas_total,
            'ingresos_extras' => $ingresos_extras,
            'egresos' => $egresos,
            'saldo_esperado' => $saldo_esperado,
            'monto_cierre_real' => (float)$sesion['monto_cierre_real'],
            'diferencia' => (float)$sesion['diferencia']
        ]
    ]);
} catch (Exception $e) {
    http_response_code(400);
    echo json_encode([
        'success' => false,
        'error' => $e->getMessage()
    ]);
}
?>
