<?php

namespace App\Http\Middleware;

use App\Models\Company;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

/**
 * Asegura que el usuario tenga una empresa válida en sesión.
 *
 * Para operadores (Fycls): si no han elegido empresa, los lleva al switcher.
 * Para usuarios normales: setea automáticamente su empresa en sesión.
 * Si la empresa está inactiva: cierra sesión.
 */
class EnsureValidCompany
{
    public function handle(Request $request, Closure $next): Response
    {
        if (!auth()->check()) return $next($request);

        $user = auth()->user();

        // Si el usuario no tiene empresa, no debería estar logueado
        if (!$user->company) {
            auth()->logout();
            return redirect('/login')->with('error', 'Tu cuenta no está asociada a ninguna empresa. Contacta al administrador.');
        }

        // Si su empresa está inactiva → logout
        if (!$user->company->is_active) {
            auth()->logout();
            return redirect('/login')->with('error', 'Tu empresa ha sido desactivada. Contacta al administrador.');
        }

        // Para operadores: validar empresa seleccionada
        if ($user->isOperatorMember()) {
            $current = session('current_company_id');
            $globalView = session('global_view', false);

            // Si no está en vista global ni tiene empresa seleccionada,
            // por defecto mostrarle la empresa operadora (Fycls)
            if (!$globalView && !$current) {
                session(['current_company_id' => $user->company_id]);
            }

            // Validar que la empresa seleccionada existe y está activa
            if ($current) {
                $company = Company::find($current);
                if (!$company || !$company->is_active) {
                    session()->forget('current_company_id');
                    session(['current_company_id' => $user->company_id]);
                }
            }
        }
        // Usuarios normales: forzar su empresa
        else {
            if (session('current_company_id') !== $user->company_id) {
                session(['current_company_id' => $user->company_id]);
            }
            // Asegurar que NO tienen vista global
            session()->forget('global_view');
        }

        return $next($request);
    }
}
