<?php

namespace App\Services\Instalador;

use App\Models\User;
use Illuminate\Support\Facades\Schema;
use Throwable;

/**
 * Decide se o instalador web ainda pode ser aberto.
 *
 * O instalador cria o dono do sistema — quem chegar nele primeiro fica com a
 * plataforma. Por isso ele se fecha sozinho assim que existe um usuário master,
 * e permanece fechado por um arquivo de trava mesmo que o banco seja recriado.
 */
class EstadoInstalacao
{
    public static function caminhoDaTrava(): string
    {
        return storage_path('app/instalado.lock');
    }

    public static function concluida(): bool
    {
        if (file_exists(self::caminhoDaTrava())) {
            return true;
        }

        // Sem trava, a presença de um master já indica sistema em uso.
        try {
            return Schema::hasTable('users')
                && User::where('role', User::ROLE_MASTER)->exists();
        } catch (Throwable) {
            // Banco inacessível: a instalação ainda não aconteceu.
            return false;
        }
    }

    public static function concluir(): void
    {
        file_put_contents(
            self::caminhoDaTrava(),
            'Instalado em '.now()->format('d/m/Y H:i:s')."\n".
            "Apague este arquivo apenas se precisar reinstalar do zero.\n",
        );
    }

    public static function reabrir(): void
    {
        if (file_exists(self::caminhoDaTrava())) {
            unlink(self::caminhoDaTrava());
        }
    }
}
