<?php
/**
 * Arquivo de declaração da classe Conexao.
 */
class Conexao
{
    /**
     * Conexão.
     *
     * @var mixed
     */
    private $conexao;

    /**
     * Instancia da conexão.
     *
     * @var mixed
     */
    private static $instancia;

    /**
     * Método construtor.
     */
    public function __construct()
    {
        try {
            $host = $_SERVER['HTTP_HOST'];

            switch ($host) {
                case 'localhost':
                case 'localhost:89':
                case 'localhost:88':
                case preg_match('/192.168.0.*/', $host) ? true : false:
                // no break
                case preg_match('/192.168.25.*/', $host) ? true : false:
                    $dbHost = 'localhost';
                    $dbName = 'empetur';
                    $dbUserName = 'root';
                    $dbPassword = '';
                break;
                default:
                    $dbHost = 'localhost';
                    $dbName = 'empetur';
                    $dbUserName = '';
                    $dbPassword = '';
                break;
            }

            $this->conexao = new PDO("mysql:host=$dbHost;dbname=$dbName", $dbUserName, $dbPassword, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
            $this->conexao->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $ex) {
            die($ex->getMessage());
        }
    }

    /**
     * Método estático para instanciar a classe de conexão utilizando o padrão singleton.
     */
    public static function getInstancia()
    {
        if (!isset(self::$instancia)) {
            self::$instancia = new Conexao();
        }

        return self::$instancia;
    }

    /**
     * Conexão.
     */
    public function getConexao()
    {
        return $this->conexao;
    }

    /**
     * Método para iniciar a transição.
     */
    public function beginTransaction()
    {
        return $this->conexao->beginTransaction();
    }

    /**
     * Método para desfazer a transição.
     */
    public function rollBack()
    {
        return $this->conexao->rollBack();
    }

    /**
     * Método para executar a transição.
     */
    public function commit()
    {
        return $this->conexao->commit();
    }

    /**
     * Define os parâmetros de uma query.
     *
     * @param mixed &$sql
     * @param array  $parametros
     */
    public function setParametros(&$sql, $parametros = array())
    {
        if (isset($parametros)) { 
            if (count($parametros) > 0) {
                foreach ($parametros as $params) {
                    switch ($params['tipo']) {
                        case 'STR':
                            $sql->bindValue($params['referencia'], $params['valor'], PDO::PARAM_STR);
                        break;
                        case 'INT':
                            $sql->bindValue($params['referencia'], $params['valor'], PDO::PARAM_INT);
                        break;
                    }
                }
            }
        }
    }
}
