<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\User;
use App\Support\Impersonation;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;

class AdminImpersonationController extends Controller
{
    public function start(Request $request, User $user): RedirectResponse
    {
        /** @var User $admin */
        $admin = $request->user();

        abort_if($user->is_admin, 403, 'No se puede impersonar a un administrador.');
        abort_if($user->id === $admin->id, 403, 'No puede impersonarse a sí mismo.');
        abort_if(
            Impersonation::isActive($request),
            403,
            'Ya hay una sesión de impersonación activa. Finalícela antes de continuar.',
        );

        Impersonation::start($request, $admin, $user, readOnly: true);

        return redirect()
            ->route('dashboard')
            ->with(
                'status',
                sprintf(
                    'Está viendo la plataforma como %s en modo solo lectura.',
                    $user->name,
                ),
            );
    }

    public function stop(Request $request): RedirectResponse
    {
        abort_unless(Impersonation::isActive($request), 403);

        Impersonation::stop($request);

        $returnUrl = Impersonation::consumeStoppedReturnUrl($request)
            ?? route('admin.users.index');

        return redirect()
            ->to($returnUrl)
            ->with('status', 'Sesión de impersonación finalizada.');
    }
}
