<?php

session_cache_limiter(1);
ob_start();
session_start();

//header('Access-Control-Allow-Origin: *');
//header('Access-Control-Allow-Methods: GET, POST');

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ERROR);



date_default_timezone_set('America/Sao_Paulo');
include_once '../connect/class.connect_mysql.php';
include_once '../DM/prepareSql.php';
include_once '../DM/encrypt.php';
include_once '../DM/sql.empresa.php';

extract($_REQUEST);

// $_SESSION['ID'] = session_id();   

class Login {

    // Constante com a quantidade de tentativas aceitas
    private $TENTATIVAS_ACEITAS = 5;
    // Constante com a quantidade minutos para bloqueio
    private $MINUTOS_BLOQUEIO = 30;

    function __construct() {
        
    }

    function setLoginEmpresa($param) {
        if (empty($param['pass']))
            die('{"loginErro":"Informe a senha"}');

        if (empty($param['nome']))
            die('{"loginErro":"Informe o usuário"}');

        $conexao = ConexaoMysql::getConectar();

        $sql = "SELECT count(*) AS tentativas, MINUTE(TIMEDIFF(NOW(), MAX(data_hora))) AS minutos ";
        $sql .= "FROM login_log_tentativa WHERE ip = ? and DATE_FORMAT(data_hora,'%Y-%m-%d') = ?";
        $stm = $conexao->prepare($sql);
        $stm->bindValue(1, $_SERVER['SERVER_ADDR']);
        $stm->bindValue(2, date('Y-m-d'));
        $stm->execute();
        $retorno = $stm->fetch(PDO::FETCH_OBJ);

        if ($_SESSION['tentativas'] >= $this->TENTATIVAS_ACEITAS)
            if (!empty($retorno->tentativas) && intval($retorno->minutos) <= $this->MINUTOS_BLOQUEIO):
                //$_SESSION['tentativas'] = 1;
                $retorno = array('loginErro' => 'Você excedeu o limite de ' . $this->TENTATIVAS_ACEITAS . ' tentativas, login bloqueado por ' . $this->MINUTOS_BLOQUEIO . ' minutos!');
                echo json_encode($retorno);
                exit();
        endif;


        $param['pass'] = base64_decode($param['pass']);

        $sqlLogin = 'select id_usuario, nome, login, id_empresa from usuario
                where login = :nome  
                and senha = :pass
                and excluido = "N" 
                limit 1';

        $call = executa::SQL($conexao, $sqlLogin, $param);
        $user = $call->pdo->fetch(PDO::FETCH_OBJ);



        if (isset($user->id_usuario)) {
            $sqlEmpresa = new SqlEmpresa($conexao);
            $call = $sqlEmpresa->getEmpresa($user);
            $empresa = $call->pdo->fetch(PDO::FETCH_OBJ);


            $_SESSION['ID'] = session_id();
            $chave = $_SESSION['ID'] . '|';

            foreach ($user as $ln)
                $chave .= $ln . '|';

            $_SESSION['tentativas'] = 0;

            echo '{"chave":"' . realEncryp($chave) . '", "id_usuario":"' . $user->id_usuario . '", "nome":"' . $user->nome . '", "empresa":' . json_encode($empresa) . '}';
        } else {

            $_SESSION['tentativas'] = (isset($_SESSION['tentativas'])) ? $_SESSION['tentativas'] += 1 : 1;


//	$bloqueado = ($_SESSION['tentativas'] == $this->TENTATIVAS_ACEITAS) ? 'SIM' : 'NAO';


            $sql = 'INSERT INTO login_log_tentativa (ip, senha, origem) VALUES (?, ?, ?)';
            $stm = $conexao->prepare($sql);
            $stm->bindValue(1, $_SERVER['SERVER_ADDR']);
            $stm->bindValue(2, $param['nome'] . '|' . $param['pass']);
            $stm->bindValue(3, $param['uuid'] . ' ' . $_SERVER['HTTP_REFERER']);
            $stm->execute();




            echo '{"loginErro":"Usuario ou Senha não confere (' . $_SESSION['tentativas'] . ') "}';
        }
    }

    function getLoginEmpresa($param) {

        $aut = $this->getAuthentication($param['chave']);

        $this->getUsuarioValido($aut[4], $aut[1]);

        echo '{"ok":"ok"}';
    }

    function getAuthentication($chave) {
        $chave = realDecryp($chave);
        $aut = explode('|', $chave);

        //[0] => chave 
        //[1] => id_usuario 
        //[2] => nome full 
        //[3] => login 
        //[4] => id_empresa 
        //[5] => ) 

        if ($_SESSION['ID'] != $aut[0])
            die('{"loginChave":"A chave não é mais valída"}');

        return $aut;
    }

    function getUsuarioValido($id_empresa, $id_usuario) {
        $conexao = ConexaoMysql::getConectar();

        //verifica usuario ativo
        $sql = "select id_empresa from usuario where  id_empresa = ? and id_usuario = ? and excluido = 'N'";

        $pdo = $conexao->prepare($sql);
        $pdo->bindValue(1, $id_empresa);
        $pdo->bindValue(2, $id_usuario);
        $pdo->execute();
        $rs = $pdo->fetch(PDO::FETCH_OBJ);

        if (empty($rs->id_empresa))
            die('{"loginChave":"Usuário não localizado verifique"}');
    }

    function logout() {
        session_destroy();
        echo '{"ok":"ok"}';
    }

}

$class = new $class();
$class->$call(@$param);

