<?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 FeederDB extends PDO {

    public static $instancia = null;
    
    public function __construct() {
        self::bdDesarrollo();
        try {
            parent::__construct(
                    'mysql:host=' .FHOST . ';dbname=' . FBD_NAME, FBD_USER, FBD_PASSWORD, array(
                PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
                PDO::ATTR_PERSISTENT => false
                    )
            );
            $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::$instancia)) {
            $miclase = __CLASS__;
            self::$instancia = new $miclase;
        }
        return self::$instancia;
    }
    
    
    public static function iniciarTransaccion(){
        $conexion = self::singleton();
        $conexion->beginTransaction();
    }
    
    public static function grabarTransaccion(){
        $conexion = self::singleton();
        $conexion->commit();
    }
    
    public static function cancelarTransaccion(){
        $conexion = self::singleton();
        $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;
        }
    }

    private static function bdDesarrollo() {
        define('FHOST', '192.185.163.242');
        define('FBD_NAME', 'palmsoft_feeder');
        define('FBD_NAME_LOG', 'palmsoft_ccsm');
        define('FBD_USER', 'palmsoft_ccsm');
        define('FBD_PASSWORD', 'h6OCwyhh%B_)');
    }

}

