<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\File;

/**
 * Supprime config/installed.lock pour rouvrir l'assistant /install (développement / démo).
 */
class InstallUnlockCommand extends Command
{
    protected $signature = 'install:unlock
                            {--force : En production, confirmer la suppression du lock (dangereux)}';

    protected $description = 'Supprime installed.lock pour accéder de nouveau à /install (voir docs/INSTALLATEUR.md)';

    public function handle(): int
    {
        $path = base_path('config/installed.lock');

        if (! File::exists($path)) {
            $this->info('Aucun fichier config/installed.lock : l’assistant /install est déjà accessible.');
            $this->line('Ouvrez : '.url('/install'));

            return self::SUCCESS;
        }

        if (app()->environment('production') && ! $this->option('force')) {
            $this->error('En production, la suppression du lock est refusée sans --force.');
            $this->warn('Réactiver /install sur un site en ligne permettrait de réécraser la config (risque).');
            $this->line('En local : APP_ENV=local, ou : php artisan install:unlock --force (avec confirmation).');

            return self::FAILURE;
        }

        if ($this->option('force') && app()->environment('production')) {
            if (! $this->confirm('SUPPRIMER installed.lock en PRODUCTION ? L’URL /install sera à nouveau accessible.', false)) {
                $this->line('Annulé.');

                return self::FAILURE;
            }
        }

        File::delete($path);
        $this->info('Fichier config/installed.lock supprimé.');
        $this->newLine();
        $this->line('→ Ouvrez dans le navigateur : <fg=cyan>'.url('/install').'</>');
        $this->warn('Après un nouvel install, un nouvel admin peut être créé : sauvegardez vos données avant de réinstaller.');

        return self::SUCCESS;
    }
}
