<?php

use App\Models\ClienteMembresiaModel;

if (!function_exists('carrito_snapshot')) {
    /**
     * Devuelve una instantánea normalizada del carrito de alimentos/promociones
     * guardado en sesión (misma estructura que usa el controlador Alimentos),
     * aplicando el descuento de membresía vigente si el cliente tiene una.
     *
     * Se usa para poder mostrar el widget de carrito (botón flotante + panel
     * lateral) en cualquier vista del sitio: alimentos, su pago, promociones
     * y el pago de membresía, no solo en /alimentos.
     */
    function carrito_snapshot(): array
    {
        $carritoSesion = session()->get('carrito_temp');
        $items = (is_array($carritoSesion) && isset($carritoSesion['items']) && is_array($carritoSesion['items']))
            ? $carritoSesion['items']
            : [];

        $descuentoPct = 0.0;
        if (session()->get('isLoggedIn')) {
            $cmModel = new ClienteMembresiaModel();
            $membresiaActiva = $cmModel->getMembresiaActiva(session()->get('user_id'));
            $descuentoPct = $membresiaActiva ? (float) $membresiaActiva->descuento_pct : 0.0;
        }

        $subtotalOriginal = 0.0;
        $subtotalFinal = 0.0;

        foreach ($items as $key => &$item) {
            $item['cantidad'] = max(1, (int) ($item['cantidad'] ?? 1));
            $item['precio_unitario'] = (float) ($item['precio_unitario'] ?? 0);
            $usePromocion = !empty($item['id_promocion']);
            $item['precio_final'] = $usePromocion
                ? $item['precio_unitario']
                : round($item['precio_unitario'] * (1 - $descuentoPct / 100), 2);
            $item['subtotal'] = round($item['precio_final'] * $item['cantidad'], 2);
            $item['line_key'] = $key;
            $subtotalOriginal += round($item['precio_unitario'] * $item['cantidad'], 2);
            $subtotalFinal += $item['subtotal'];
        }
        unset($item);

        return [
            'items' => $items,
            'subtotal' => $subtotalOriginal,
            'descuento_pct' => $descuentoPct,
            'descuento_monto' => round($subtotalOriginal - $subtotalFinal, 2),
            'total' => round($subtotalFinal, 2),
        ];
    }
}
