<?php

declare(strict_types=1);

namespace Fennec\Config;

/**
 * Conteneur de configuration immuable, exposant les valeurs chargées depuis un fichier .env.local.
 */
final class Config
{
    /**
     * @param array<string, string|int|float|bool> $values
     */
    public function __construct(private readonly array $values)
    {
    }

    /**
     * Construit une instance à partir d'un fichier de configuration sur le disque.
     *
     * @throws ConfigFileNotFoundException Si le fichier n'existe pas ou n'est pas lisible.
     * @throws ConfigParseException Si une ligne du fichier ne respecte pas le format attendu.
     */
    public static function fromFile(string $filePath): self
    {
        $parser = new EnvFileParser();

        return new self($parser->parseFile($filePath));
    }

    /**
     * Récupère une valeur de configuration, ou $default si la clé est absente.
     */
    public function get(string $key, mixed $default = null): mixed
    {
        return $this->values[$key] ?? $default;
    }

    /**
     * Indique si une clé de configuration est présente.
     */
    public function has(string $key): bool
    {
        return \array_key_exists($key, $this->values);
    }
}
