<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Str;

class GenerarTokenInstalacion extends Command
{
    protected $signature = 'instalador:token';

    protected $description = 'Genera el token que habilita el asistente de instalación web (/instalar)';

    public function handle(): int
    {
        if (file_exists(storage_path('installed.lock'))) {
            $this->error('El sistema ya está instalado (existe storage/installed.lock). Si de verdad necesitás reinstalar, borrá ese archivo primero — con cuidado, eso vuelve a exponer el asistente.');

            return self::FAILURE;
        }

        // La sesión (incluso con SESSION_DRIVER=file) necesita APP_KEY para
        // encriptar la cookie. Sin esto, la PRIMERA request al asistente web
        // falla con MissingAppKeyException antes de llegar a ningún
        // controlador — hay que resolverlo acá, por SSH, no se puede
        // resolver dentro de un request web (huevo y gallina).
        if (empty(config('app.key'))) {
            Artisan::call('key:generate', ['--force' => true]);
            $this->info('APP_KEY generada.');
        }

        $token = Str::random(32);
        file_put_contents(storage_path('install.token'), $token);
        chmod(storage_path('install.token'), 0600);

        $this->info('Token de instalación generado.');
        $this->line('Visitá esta URL en el navegador para continuar:');
        $this->line(config('app.url').'/instalar?token='.$token);

        return self::SUCCESS;
    }
}
