<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginRequest;
use App\Models\TrustedDevice;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
use Illuminate\View\View;

class AuthenticatedSessionController extends Controller
{
    /**
     * Display the login view.
     */
    public function create(): View
    {
        return view('auth.login');
    }

    /**
     * Handle an incoming authentication request.
     */
    public function store(LoginRequest $request): RedirectResponse
    {
        $request->authenticate();

        $request->session()->regenerate();

        $user = Auth::user();

        // Verifică dacă utilizatorul are 2FA activat
        if ($user && $user->two_factor_enabled) {
            // Verifică dacă există un trusted device valid
            $trustedDeviceToken = $request->cookie('2fa_trusted_device');

            Log::debug('Login - Checking trusted device', [
                'user_id' => $user->id,
                'cookie_exists' => !empty($trustedDeviceToken),
                'token_prefix' => $trustedDeviceToken ? substr($trustedDeviceToken, 0, 10) : null
            ]);

            if ($trustedDeviceToken) {
                $trustedDevice = TrustedDevice::findValidDevice($user, $trustedDeviceToken);

                if ($trustedDevice) {
                    // Dispozitiv trusted valid - marchează sesiunea ca verificată și skip 2FA
                    session(['2fa_verified' => true]);

                    // Actualizează last_used_at
                    $trustedDevice->last_used_at = now();
                    $trustedDevice->save();

                    Log::info('Login - Trusted device valid, skipping 2FA', [
                        'user_id' => $user->id,
                        'device_id' => $trustedDevice->id
                    ]);

                    return redirect()->intended(route('dashboard', absolute: false));
                }
            }

            // Nu marca sesiunea ca verificată 2FA încă
            // Redirecționează către pagina de challenge 2FA
            return redirect()->route('auth.two-factor.challenge')
                ->with('info', 'Vă rugăm să introduceți codul de autentificare cu doi factori.');
        }

        return redirect()->intended(route('dashboard', absolute: false));
    }

    /**
     * Destroy an authenticated session.
     */
    public function destroy(Request $request): RedirectResponse
    {
        Auth::guard('web')->logout();

        $request->session()->invalidate();

        $request->session()->regenerateToken();

        return redirect('/');
    }
}
