<?php
/**
 * @brief Classe gérant le comportement à la base de données
 * @brief Sert d'intermédiaire entre la BDD et le PDO
 */
class bdd {

    ///Instance de la connexion à la base de données
    private $instancePDO;
    
    ///Instance statique de la base de données
    private static $bdd;

    /**
     * @brief Construit une nouvelle connexion à la base de données
     */
    private function __construct() {
        
        try {
            //Mise en place des options
            $options = array(
                PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
            );
            
            //Création du PDO
            $this->instancePDO = new PDO(config::$bdd_address, config::$bdd_user, config::$bdd_password, $options);
            
            //On précise les options du PDO
            $this->instancePDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            if (config::$debug) {
                //En cas de bug et si le mode DEBUG est activé
                //On affiche un message
                echo 'Connexion échouée : ' . $e->getMessage();
                header("Refresh: 0;URL=index.php?page=500");
            }
        }
    }

    /**
     * @brief Accesseur de l'instance bdd
     * @return instance BDD
     * @note Création automatique d'une nouvelle instance si besoin
     */
    public static function getInstance() {
        if (!isset(self::$bdd)) {
            //Si l'instance n'a pas encore été crée
            //On en créer une nouvelle et on la stocke
            self::$bdd = new bdd();
        }

        //On renvoie l'instance sauvegardée
        return self::$bdd;
    }

    /**
     * @brief Accesseur pour l'objet PDO de la classe
     * @return PDO
     */
    public function getPDO() {
        return $this->instancePDO;
    }

}

?>
