<?php

/**
 * user info
 * @package themes.responsivo.helpers
 * Class user
 */

class User extends CHtml {

    private static $user;

    public static function getUser($redirect = false) {
        if(!Yii::app()->user->id && $redirect) {
            include(YII_BASE.'/protected/views/site/not_logged.php');
            die();
        } else if(!Yii::app()->user->id) {
            Yii::app()->user->logout();
        }
        if(empty(self::$user)) {
            $uid = md5(Yii::app()->user->id);
            self::$user = (Object) Yii::app()->session['user'];
            if (!self::$user) {
                include(YII_BASE.'/protected/views/site/not_logged.php');
                die();
            }
        }
        return self::$user;
    }

    public static function getId() {
        return self::getUser()->FUN_IDFUNCIONARIO;
    }

    public static function getName() {
        return self::getUser()->FUN_NOME;
    }

    public static function getShortName() {
        $name = explode(' ', self::getUser()->FUN_NOME);
        return $name[0].' '.end($name);
    }

    public static function getPrivilegio() {
        return self::getUser()->FUN_PRM_PRIVILEGIO;
    }

    public static function getPermissao($permissao) {
        if(!isset(self::getUser()->{$permissao})) {
            throw new Exception("Permissão $permissao não existente na tabela de funcionários", 1);
        }
        return self::getUser()->{$permissao} == 1;
    }

    public static function getRevenda() {
        return self::getUser()->FUN_IDREVENDA;
    }

    public static function canCreate() {
        return self::getUser()->FUN_PRM_INCLUIR == 1;
    }

    public static function canUpdate() {
        return self::getUser()->FUN_PRM_UPDATE == 1;
    }

    public static function getSetor() {
        return self::getUser()->FUN_IDSETOR;
    }

    public static function getFuncao() {
        return self::getUser()->FUN_IDFUNCAO;
    }

    public static function getPrivilegioImplantacao() {
        return self::getUser()->FUN_TBL_IMPLANTACAO;
    }

    public static function isActive() {
        return (self::getUser()->FUN_SITUACAO == 'A');
    }

    public static function getEstados($implode = false){
        if($implode)
            return implode(',', array_keys(Yii::app()->controller->estados));
        return Yii::app()->controller->estados;
    }

    public static function getCidades($implode = false) {
        if($implode)
            return implode(',', array_keys(Yii::app()->controller->cidades));
        return Yii::app()->controller->cidades;
    }

    public static function getCidadesEstados($implode = false) {
        if($implode)
            return implode(',', array_keys(Yii::app()->controller->cidades_estados));
        return Yii::app()->controller->cidades_estados;
    }

    public static function getCidadesEstadosByUf($uf, $implode = false) {
        if(empty($uf)) {
            return self::getCidadesEstados($implode);
        }
        $cidades = self::getCidades(true);
        if(empty($cidades)) {
            if($implode) {
                return;
            }
            return array();
        }
        $cidades = Chtml::listData(Cidades::model()->findAll("CID_IDCIDADE in ({$cidades}) and CID_UF = '{$uf}'"), 'CID_IDCIDADE', 'CidadeEstado');
        if($implode)
            return implode(',', array_keys($cidades));
        return $cidades;
    }

    public static function getRegioes($implode = false) {
        if($implode)
            return implode(',', array_keys(Yii::app()->controller->regioes));
        return Yii::app()->controller->regioes;
    }

    public static function getRevendas($implode = false) {
        if($implode)
            return implode(',', array_keys(Yii::app()->controller->revendas));
        return Yii::app()->controller->revendas;
    }

    public static function getProjetos($implode = false) {
        if($implode)
            return implode(',', array_keys(Yii::app()->controller->projetos));
        return Yii::app()->controller->projetos;
    }

    public static function getFuncionariosRevendas($implode = false) {
        if($implode)
            return implode(',', array_keys(Yii::app()->controller->funcionarios_revendas));
        return Yii::app()->controller->funcionarios_revendas;
    }

    public static function isAdmin() {
        return self::getPrivilegio() == 1;
    }

    public static function isAdminSupervisorGerenteRevenda() {
        return in_array(self::getPrivilegio(), array(1, 7, 20));
    }

    public static function isRevenda() {
        return in_array(self::getPrivilegio(), array(4, 9, 10, 13, 14, 17, 18, 19));
    }

    public static function deRevenda()
    {
        $revenda_usuario = self::getUser()->FUN_IDREVENDA;
        if (!empty($revenda_usuario)) {
            $sql = "SELECT REV_TIPO FROM revendas WHERE REV_IDREVENDA = ".$revenda_usuario;

            if (Yii::app()->db->createCommand($sql)->queryRow()['REV_TIPO'] == 3) {
                return true;
            } else {
                return false;
            }
        }
        return true;
    }

    public static function isTecnico() {
        return self::getPrivilegio() == 4;
    }

    public static function isVendedor() {
        return self::getPrivilegio() == 10;
    }

    public static function canListUsers() {
        return (!self::isTecnico() && !self::isVendedor());
    }

    public static function getFuncionariosComercialAdministrativo()
    {
        $sql = "SELECT FUN_IDFUNCIONARIO AS id, FUN_NOME AS nome
                FROM funcionarios
                WHERE FUN_SITUACAO='A'
                      and FUN_IDFUNCIONARIO IN (".self::getFuncionariosRevendas(true).")
                      AND (FUN_IDSETOR in(4,5) or FUN_PRM_PRIVILEGIO = 9)
                ORDER BY FUN_NOME";

        return self::getSqlData($sql);
    }

    public static function getFuncionariosComercialAdministrativoFinanceiro() {
        $sql = 'SELECT FUN_IDFUNCIONARIO AS id, FUN_NOME AS nome FROM funcionarios WHERE FUN_SITUACAO="A" and FUN_IDFUNCIONARIO IN (' . self::getFuncionariosRevendas(true) . ') AND (FUN_IDSETOR in(3,4,5) or FUN_PRM_PRIVILEGIO = 9) order by FUN_NOME';

        return self::getSqlData($sql);
    }

    public static function getAllFuncionariosComercial()
    {
        $fun_revendas = self::getFuncionariosRevendas(true);
        $funcionarios = Funcionarios::model()->findAll(['order' => 'FUN_SITUACAO, FUN_NOME', 'condition' => "FUN_IDFUNCIONARIO IN ({$fun_revendas}) AND (FUN_IDSETOR = 5 or FUN_PRM_PRIVILEGIO = 9)"]);
        return CHtml::listData($funcionarios, 'FUN_IDFUNCIONARIO', 'FUN_NOME', 'SituacaoPlural');
    }

    public static function getFuncionariosComercial()
    {
        $sql = "SELECT FUN_IDFUNCIONARIO AS id, FUN_NOME AS nome
                FROM funcionarios
                WHERE FUN_SITUACAO='A'
                      and FUN_IDFUNCIONARIO IN (".self::getFuncionariosRevendas(true).")
                      AND (FUN_IDSETOR = 5 or FUN_PRM_PRIVILEGIO = 9)
                ORDER BY FUN_NOME";

        return self::getSqlData($sql);
    }

    public static function getFuncionariosSuporte() {
        $sql = 'SELECT FUN_IDFUNCIONARIO AS id, FUN_NOME AS nome FROM funcionarios WHERE FUN_SITUACAO="A" AND FUN_IDFUNCIONARIO IN (' . self::getFuncionariosRevendas(true) . ') AND (FUN_IDSETOR = 1 or FUN_PRM_PRIVILEGIO = 9) order by FUN_NOME';

        return self::getSqlData($sql);
    }

    public static function getFuncionariosSuporteSuporteRevenda() {
        $sql = 'SELECT FUN_IDFUNCIONARIO AS id, FUN_NOME AS nome FROM funcionarios WHERE FUN_SITUACAO="A" AND FUN_IDFUNCIONARIO IN (' . self::getFuncionariosRevendas(true) . ') AND (FUN_IDSETOR in (1,7) or FUN_PRM_PRIVILEGIO = 9) order by FUN_NOME';

        return self::getSqlData($sql);
    }

    public static function getFuncionariosComercialSuporte() {
        $sql = 'SELECT FUN_IDFUNCIONARIO AS id, FUN_NOME AS nome FROM funcionarios WHERE FUN_SITUACAO="A" AND FUN_IDFUNCIONARIO IN (' . self::getFuncionariosRevendas(true) . ') AND FUN_IDSETOR in (1,3,4,5) order by FUN_NOME';

        return self::getSqlData($sql);
    }

    public static function getFuncionariosAcessoProspectosClientes() {
        $sql = 'SELECT FUN_IDFUNCIONARIO AS id, FUN_NOME AS nome FROM funcionarios WHERE FUN_TBL_PROSPECTOS = 1 AND FUN_SITUACAO="A" and FUN_IDFUNCIONARIO IN (' . self::getFuncionariosRevendas(true) . ') order by FUN_NOME';

        return self::getSqlData($sql);
    }

    public static function getTecnicosPendencias() {

        $sql = 'SELECT FUN_IDFUNCIONARIO AS id, FUN_NOME AS nome
                FROM funcionarios
                WHERE FUN_SITUACAO="A" AND FUN_IDFUNCIONARIO IN (' . self::getFuncionariosRevendas(true) . ')
                      AND (FUN_IDSETOR in (1,6,7) or FUN_PRM_PRIVILEGIO = 9)
                ORDER BY FUN_NOME';

        return self::getSqlData($sql);
    }

    public static function getClientesPendencias() {
        $sql = "SELECT CLI_IDCLIENTE as id, CLI_NOME as nome, CLI_FANTASIA as nome2 from clientes where  CLI_SITUACAO = 'A' AND CLI_CIDADE IN (".User::getCidades(true).") order by CLI_NOME";

        return self::getSqlData($sql);
    }

    public static function getFuncionarios()
    {
        $sql = "SELECT FUN_IDFUNCIONARIO AS id, FUN_NOME as nome FROM funcionarios WHERE FUN_SITUACAO = 'A' OR FUN_NOME LIKE '%administrador%' ORDER BY FUN_NOME";

        return self::getSqlData($sql);
    }

    private static function getSqlData($sql) {
        $data = array();
         foreach(Yii::app()->db->createCommand($sql)->queryAll() as $row) {
                $data[$row['id']] = $row['nome'];
            }
        return $data;
    }

    public static function trabalhaSegunda() {
        if(self::getUser()->FUN_RESTRICAOACESSO == 0){
            return true;
        }
        else{

            return self::getUser()->FUN_SEGUNDA == date('w');
        }
    }
    public static function trabalhaTerca() {
        if(self::getUser()->FUN_RESTRICAOACESSO == 0){
            return true;
        }
        else{
            return self::getUser()->FUN_TERCA == date('w');
        }
    }
    public static function trabalhaQuarta() {
        if(self::getUser()->FUN_RESTRICAOACESSO == 0){
            return true;
        }
        else{
            return self::getUser()->FUN_QUARTA == date('w');
        }
    }
    public static function trabalhaQuinta() {
        if(self::getUser()->FUN_RESTRICAOACESSO == 0){
            return true;
        }
        else{
            return self::getUser()->FUN_QUINTA == date('w');
        }
    }
    public static function trabalhaSexta() {
        if(self::getUser()->FUN_RESTRICAOACESSO == 0){
            return true;
        }
        else{
            return self::getUser()->FUN_SEXTA == date('w');
        }
    }
    public static function trabalhaSabado() {
        if(self::getUser()->FUN_RESTRICAOACESSO == 0){
            return true;
        }
        else{
            return self::getUser()->FUN_SABADO == date('w');
        }
    }
    public static function trabalhaDomingo() {
        if(self::getUser()->FUN_RESTRICAOACESSO == 0){
            return true;
        }
        else{
            return self::getUser()->FUN_DOMINGO == date('w');
        }
    }
    public static function horaInicioManha($string = false) {
        if ($string) {
            return substr(self::getUser()->FUN_HORAMANHAINICIO, 0, 5);
        }
        return DateTime::createFromFormat('H:i:s', self::getUser()->FUN_HORAMANHAINICIO);
    }
    public static function horafimManha($string = false) {
        if ($string) {
            return substr(self::getUser()->FUN_HORAMANHAFIM, 0, 5);
        }
        return DateTime::createFromFormat('H:i:s', self::getUser()->FUN_HORAMANHAFIM);
    }
    public static function horaInicioTarde($string = false) {
        if ($string) {
            return substr(self::getUser()->FUN_HORATARDEINICIO, 0, 5);
        }
        return DateTime::createFromFormat('H:i:s', self::getUser()->FUN_HORATARDEINICIO);
    }
    public static function horaFimTarde($string = false) {
        if ($string) {
            return substr(self::getUser()->FUN_HORATARDEFIM, 0, 5);
        }
        return DateTime::createFromFormat('H:i:s', self::getUser()->FUN_HORATARDEFIM);
    }

    public static function isWorking() {
        if (
            !self::trabalhaSegunda() &&
            !self::trabalhaTerca() &&
            !self::trabalhaQuarta() &&
            !self::trabalhaQuinta() &&
            !self::trabalhaSexta() &&
            !self::trabalhaSabado() &&
            !self::trabalhaDomingo()
        ) {
            return false;
        }

        if (self::getUser()->FUN_RESTRICAOACESSO == 2) {
            $agora = DateTime::createFromFormat('H:i:s', date('H:i:s'));
            if (
                $agora < self::horaInicioManha() ||
                ($agora > self::horaFimManha() && $agora < self::horaInicioTarde()) ||
                $agora > self::horaFimTarde()
            ) {
                return false;
            }
        }
        return true;
    }

    public static function isAutomatic() {
        $automaticoGet = filter_input(INPUT_GET, 'automatico', FILTER_DEFAULT);
        $automaticoPost = filter_input(INPUT_POST, 'automatico', FILTER_DEFAULT);
        return !empty($automaticoGet) || !empty($automaticoPost);
    }

    public static function blockNotWorking() {
        if (!self::isWorking()) {
            if (!self::isAutomatic()) {
                Util::AcessoIndevido(true);
            }
            include(YII_BASE.'/protected/views/site/not_working.php');
            die;
        }
    }

    public static function blockAction($message) {
        include(YII_BASE.'/protected/views/site/block_action.php');
        die;
    }

    public static function getDiasAcesso($implode = false) {
        $dias = array();
        if(self::getUser()->FUN_SEGUNDA == "1") {
            $dias[] = 'Segunda';
        }
        if(self::getUser()->FUN_TERCA == "2") {
            $dias[] = 'Terça';
        }
        if(self::getUser()->FUN_QUARTA == "3") {
            $dias[] = 'Quarta';
        }
        if(self::getUser()->FUN_QUINTA == "4") {
            $dias[] = 'Quinta';
        }
        if(self::getUser()->FUN_SEXTA == "5") {
            $dias[] = 'Sexta';
        }
        if(self::getUser()->FUN_SABADO == "6") {
            $dias[] = 'Sábado';
        }
        if(self::getUser()->FUN_DOMINGO == "7") {
            $dias[] = 'Domingo';
        }
        if($implode) {
            return implode(', ', $dias);
        }
        return $dias;
    }

    public static function getHorariosAcesso() {
        $retorno = "Manhã: " . self::horaInicioManha(true) . ' - ' . self::horafimManha(true) . "\n\r";
        $retorno .= "Tarde: " . self::horaInicioTarde(true) . ' - ' . self::horaFimTarde(true);
        return $retorno;
    }

    public static function getRevendaFuncionario()
    {
        return self::getUser()->FUN_IDREVENDA;
    }

    public static function getGerenteRevenda()
    {
        $idRevenda = self::getUser()->FUN_IDREVENDA;
        if(!$idRevenda || $idRevenda == 1) {
            return 527;
        }
        /*$sql = "SELECT FUN_IDFUNCIONARIO AS id, FUN_NOME AS nome
                FROM funcionarios f
                INNER JOIN revendas r ON f.FUN_IDREVENDA = r.REV_IDREVENDA
                WHERE
                    f.FUN_IDFUNCAO = 5 AND
                    r.REV_IDREVENDA = {$idRevenda} AND
                    FUN_SITUACAO = 'A'";*/
        $sql = "SELECT FUN_IDFUNCIONARIO AS id, FUN_NOME AS nome
                FROM funcionarios f
                WHERE
                    f.FUN_IDREVENDA = {$idRevenda} AND
                    f.FUN_SITUACAO = 'A' AND
                    f.FUN_QUALIFICAR_PENDENCIAS = 1";

        $data = self::getSqlData($sql);

        if (count($data) > 0) {
            foreach($data as $id => $nome){
                return $id;
            }
        } else {
            return 527;
        }
    }
}
