<?php

class Bdd {
    // Information de connexion à la base de données
    private $servername;
    private $username;
    private $password;
    private $database;
    
    // Instance unique de la classe
    private static $instance = null;
    
    // Connexion PDO
    private $conn = null;

    // Constructeur privé pour empêcher l'instanciation directe
    private function __construct() {
        // Valeurs par défaut
        $defaults = [
            'DB_HOST' => 'localhost',
            'DB_USER' => 'root',
            'DB_PASS' => '23011996',
            'DB_NAME' => 'nemesis'
        ];

        $this->servername = getenv('DB_HOST') ?: $defaults['DB_HOST'];
        $this->username   = getenv('DB_USER') ?: $defaults['DB_USER'];
        $this->password   = getenv('DB_PASS') ?: $defaults['DB_PASS'];
        $this->database   = getenv('DB_NAME') ?: $defaults['DB_NAME'];

        $configFile = dirname(__DIR__) . '/config.php';
        if (file_exists($configFile)) {
            $config = include $configFile;
            if (is_array($config)) {
                $this->servername = $config['DB_HOST'] ?? $this->servername;
                $this->username   = $config['DB_USER'] ?? $this->username;
                $this->password   = $config['DB_PASS'] ?? $this->password;
                $this->database   = $config['DB_NAME'] ?? $this->database;
            }
        }

        try {
            $dsn = "mysql:host={$this->servername};dbname={$this->database}";
            $this->conn = new PDO($dsn, $this->username, $this->password);
            // Paramètres de connexion : erreurs PDO en exceptions
            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch(PDOException $e) {
            echo "Erreur de connexion à la base de données : " . $e->getMessage();
        }
    }

    // Méthode pour obtenir l'instance unique de la classe
    public static function getInstance() {
        if(!self::$instance) {
            self::$instance = new Bdd();
        }
        return self::$instance;
    }

    // Méthode pour obtenir la connexion PDO
    public function getConnection() {
        return $this->conn;
    }


}

// Utilisation :
// Obtenez l'instance de la classe Database
$db = Bdd::getInstance();

// Obtenez la connexion PDO
$conn = $db->getConnection();

// Utilisez $conn pour exécuter des requêtes SQL, par exemple :
// $stmt = $conn->prepare("SELECT * FROM table");
// $stmt->execute();
// $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>

