<?php

namespace App\Helpers;

use Illuminate\Support\Facades\Cache;

class AppConfig
{
    private static $config = null;

    /**
     * Charge la configuration depuis le fichier JSON
     */
    private static function load()
    {
        if (self::$config === null) {
            $path = config_path('appconfig.json');
            
            if (!file_exists($path)) {
                throw new \Exception("Fichier de configuration non trouvé: appconfig.json");
            }
            
            $json = file_get_contents($path);
            self::$config = json_decode($json, true);
            
            if (json_last_error() !== JSON_ERROR_NONE) {
                throw new \Exception("Erreur de parsing JSON: " . json_last_error_msg());
            }
        }
        
        return self::$config;
    }

    /**
     * Récupère une valeur de configuration
     * 
     * @param string $key Clé en notation point (ex: "baseApp.isBUS")
     * @param mixed $default Valeur par défaut
     * @return mixed
     */
    public static function get($key, $default = null)
    {
        $config = self::load();
        
        // Parcourir la notation point (ex: "busOptions.activeReturn")
        $keys = explode('.', $key);
        
        foreach ($keys as $segment) {
            if (!is_array($config) || !array_key_exists($segment, $config)) {
                return $default;
            }
            $config = $config[$segment];
        }
        
        return $config;
    }

    /**
     * Récupère toute la configuration
     */
    public static function all()
    {
        return self::load();
    }

    /**
     * Vérifie si une clé existe
     */
    public static function has($key)
    {
        return self::get($key, '___NOT_FOUND___') !== '___NOT_FOUND___';
    }
}