<?php
declare(strict_types=1);

/**
 * Configurações. Os valores padrão servem para a instalação descrita no guia; para mudar algum,
 * crie o arquivo config/local.php devolvendo um array só com o que muda, por exemplo:
 *   <?php return ['tamanho_max_mb' => 30];
 */
final class Config
{
    private static ?array $valores = null;

    private const PADRAO = [
        // pasta privada: banco, arquivos recebidos e tabela de preços (fora da pasta pública)
        'dir_dados' => null,                 // null = <raiz do projeto>/dados
        'tamanho_max_mb' => 20,              // tamanho máximo de cada arquivo enviado
        'linhas_max' => 100000,              // linhas máximas por arquivo (100 mil usam ~250 MB de memória)
        'sessao_aliado_min' => 120,          // tempo sem uso até pedir login de novo
        'sessao_admin_min' => 240,
        'tentativas_max' => 5,               // erros de senha até bloquear...
        'tentativas_janela_min' => 15,       // ...por este tempo (minutos)
        'nomes_tabela_precos' => ['Tabela de Preço.xlsm', 'Tabela de Preco.xlsm', 'Tabela de Preço.xlsx', 'Tabela de Preco.xlsx'],
        'fuso' => 'America/Sao_Paulo',
    ];

    public static function get(string $chave): mixed
    {
        if (self::$valores === null) {
            $local = [];
            $arq = self::raiz() . '/config/local.php';
            if (is_file($arq)) {
                $r = require $arq;
                if (is_array($r)) {
                    $local = $r;
                }
            }
            self::$valores = array_merge(self::PADRAO, $local);
        }
        return self::$valores[$chave] ?? null;
    }

    /** Pasta do projeto (a que contém app/, public/ e dados/). */
    public static function raiz(): string
    {
        return dirname(__DIR__);
    }

    public static function dirDados(): string
    {
        $d = self::get('dir_dados');
        $d = is_string($d) && $d !== '' ? $d : self::raiz() . '/dados';
        if (!is_dir($d)) {
            @mkdir($d, 0750, true);
        }
        return rtrim($d, '/');
    }
}
