<?php

/*
 * Copyright 2017-08-31  Cámara de Comercio de Santa Marta para el Magdalena.
 * Autor: Luis Montoya <lmontoya@ccsm.org.co at www.ccsm.org.co>.
 * Archivo: Conexion.
 *
 * Licenciado bajo la Licencia Apache, Versión 2.0;
 * Usted no puede usar este archivo excepto en conformidad con la Licencia.
 * Usted puede obtener una copia de la Licencia en
 *
 *   	http://www.apache.org/licenses/LICENSE-2.0
 *
 * A menos que sea requerido por la ley aplicable o acordado por escrito, el software
 * Distribuido bajo la licencia se distribuye en una "AS IS" o  "COMO ESTA" BASE,
 * SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, expresas o implícitas.
 * Consulte la Licencia para los permisos y Limitaciones bajo la Licencia.
 */

/**
 * Description of Conexion
 *
 * @author Luis Montoya <lmontoya@ccsm.org.co at www.ccsm.org.co>
 */
class LogDB extends Conexiones {
    
    public function __construct() {
        switch( VERSION_SICAM_EJECUCION ){
            case 'PRODUCCION':
                $this->bdProduccion();
                break;
            case 'PREPRODUCCION':
                $this->bdDesarrollo();
                break;
            case 'DESARROLLO':
            default:
                $this->bdDesarrollo();
                break;
        }
        
            
        $this->dsn = 'mysql:host=' . $this->HOST . ';dbname=' . $this->BD_NAME;
        $this->username = $this->BD_USER;
        $this->password = $this->BD_PASSWORD;
        $this->options = array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", PDO::ATTR_PERSISTENT => false );
            
        try {
            parent::__construct($this->dsn, $this->username, $this->password, $this->options);
            $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            echo 'ERROR: ' . $e->getMessage() ."<br />";
            echo "Conexion desde la IP:". getHostByName(getHostName());
            die(); 
        }
    }
    
    
    public static function singleton() {
        if (!isset(self::$instanciaLog)) {
            $miclase = __CLASS__;
            self::$instanciaLog = new $miclase;
        }
        return self::$instanciaLog;
    }
    
    
    

    private function bdDesarrollo() {
        $this->HOST = '192.185.163.242';
        $this->BD_NAME = 'palmsoft_ccsm_log';
        $this->BD_USER =  'palmsoft_ccsm';
        $this->BD_PASSWORD =  'h6OCwyhh%B_)';
    }
    
    private function bdPreProduccion() {
        $this->HOST = '192.185.163.242';
        $this->BD_NAME =  'palmsoft_ccsm_log';
        $this->BD_USER =  'palmsoft_ccsm';
        $this->BD_PASSWORD =  'h6OCwyhh%B_)';
    }

    private function bdProduccion() {
        $this->HOST = '190.8.177.126';
        $this->BD_NAME =  'ccsm_sicam_log';
        $this->BD_USER =  'ccsm_sicam_prod';
        $this->BD_PASSWORD =  'Tu93175JJ#&@';
    }
    
    
    public static function iniciarTransaccion(){
        $conexion = self::singleton();
        if( !$conexion->inTransaction() ){
            $conexion->beginTransaction();
        }
    }
    
    public static function grabarTransaccion(){
        $conexion = self::singleton();
        if( $conexion->inTransaction() ){
            $conexion->commit();
        }
    }
    
    public static function cancelarTransaccion(){
        $conexion = self::singleton();
        if( $conexion->inTransaction() ){
            $conexion->rollBack();
        }
    }

    public static function selectUnaFila($sqlQuery, $datosQuery = array() ) {
        $conexion = self::singleton();
        try {
            //$conexion->beginTransaction();
            $sentenciaSql = $conexion->prepare($sqlQuery);
            $sentenciaSql->execute($datosQuery);
            $datos = $sentenciaSql->fetch(PDO::FETCH_OBJ);
            //$conexion->commit();
            if (!empty($datos)) {
                return $datos;
            }
            return NULL;
        } catch (PDOException $error) {
             if( $conexion->inTransaction() ){
                $conexion->rollBack();
            }
            throw $error;
        }
    }

    public static function selectVariasFilas($sqlQuery, $datosQuery = array() ) {
        $conexion = self::singleton();
        try {
            // $conexion->beginTransaction();
            $sentenciaSql = $conexion->prepare($sqlQuery);
            $sentenciaSql->execute($datosQuery);
            $datos = $sentenciaSql->fetchAll(PDO::FETCH_OBJ);
            // $conexion->commit();
            if (!is_null($datos)) {
                return $datos;
            }
            return NULL;
        } catch (PDOException $error) {
            if( $conexion->inTransaction() ){
                $conexion->rollBack();
            }
            throw $error;
        }
    }

    public static function insertFila($sqlQuery, $datosQuery = array() ) {
        $conexion = self::singleton();
        try {            
            //$conexion->beginTransaction();
            $sentenciaSql = $conexion->prepare($sqlQuery);
            $sentenciaSql->execute($datosQuery);
            $ultimoInsert = $conexion->lastInsertId();
            //$conexion->commit();
            if (!is_null($ultimoInsert)) {
                return $ultimoInsert;
            }
            return NULL;
        } catch (PDOException $error) {
            if( $conexion->inTransaction() ){
                $conexion->rollBack();
            }
            throw $error;
        }
    }

    public static function actualizarFila($sqlQuery, $datosQuery = array() ) {
        $conexion = self::singleton();
        try {
            //$conexion->beginTransaction();
            $sentenciaSql = $conexion->prepare($sqlQuery);
            $sentenciaSql->execute($datosQuery);
            $modificados = $sentenciaSql->rowCount();
            //$conexion->commit();
            if (!is_null($modificados)) {
                return $modificados;
            }
            return NULL;
        } catch (PDOException $error) {
             if( $conexion->inTransaction() ){
                $conexion->rollBack();
            }
            throw $error;
        }
    }

}

