<?php

namespace App\Http\Middleware;

use App\Services\ApiService;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use Symfony\Component\HttpFoundation\Response;

class ApiAuthenticate
{
    protected $apiService;

    public function __construct(ApiService $apiService)
    {
        $this->apiService = $apiService;
    }

    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next): Response
    {
        $token = Session::get('api_token');

        if (!$token) {
            return redirect()->route('login');
        }

        // Validar el token con la API
        $this->apiService->setToken($token);
        
        if (!$this->apiService->validateToken()) {
            Session::forget('api_token');
            Session::forget('user_data');
            return redirect()->route('login')->with('error', 'Su sesión ha expirado. Por favor, inicie sesión nuevamente.');
        }

        // Compartir datos del usuario con las vistas
        if (!Session::has('user_data')) {
            try {
                $userData = $this->apiService->getCurrentUser();
                Session::put('user_data', $userData);
            } catch (\Exception $e) {
                Session::forget('api_token');
                return redirect()->route('login')->with('error', 'Error al obtener datos del usuario.');
            }
        }

        return $next($request);
    }
}