<?php

namespace App\Http\Controllers\Master;

use App\Http\Controllers\Controller;
use App\Models\Company;
use App\Models\User;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

/**
 * Permite ao master abrir o painel exatamente como o cliente o vê,
 * para dar suporte. A identidade original fica na sessão para retorno.
 */
class ImpersonateController extends Controller
{
    private const CHAVE = 'impersonate.master_id';

    public function start(Request $request, Company $empresa): RedirectResponse
    {
        $alvo = User::where('company_id', $empresa->id)
            ->where('is_active', true)
            ->orderByRaw("CASE WHEN role = 'admin' THEN 0 ELSE 1 END")
            ->first();

        if (! $alvo) {
            return back()->withErrors(['impersonate' => 'Esta empresa não possui usuário ativo para acessar.']);
        }

        $request->session()->put(self::CHAVE, $request->user()->id);

        Auth::login($alvo);

        return redirect()->route('painel.dashboard')
            ->with('status', 'Você está acessando como '.$alvo->name.'.');
    }

    public function stop(Request $request): RedirectResponse
    {
        $masterId = $request->session()->pull(self::CHAVE);

        if (! $masterId) {
            return redirect()->route('painel.dashboard');
        }

        $master = User::find($masterId);

        if (! $master?->isMaster()) {
            Auth::logout();

            return redirect()->route('login');
        }

        Auth::login($master);

        return redirect()->route('master.dashboard')->with('status', 'Sessão do master retomada.');
    }

    public static function ativo(Request $request): bool
    {
        return $request->session()->has(self::CHAVE);
    }
}
