<?php
class Cliente extends UtilObjeto {

    public function __construct($params = "") {
        parent::__construct(strtolower(get_class()), $params);
    }

    public function login() {
        $email = Cliente::antiInjection($this->email);
        $senha = Cliente::antiInjection($this->senha);
        if ($email == "" || $senha == "") {
            return false;
        } else {
            $cliente = UtilObjeto::listar("cliente", "WHERE email = '" . $email . "'");
            if (!$cliente) {
                return false;
            } else {
                $dadosCliente = current($cliente);
                if ($dadosCliente['senha'] == md5($senha)) {
                    // cria sessao
                    $_SESSION['rz2']['cliente']['id'] = $dadosCliente['id'];
                    $_SESSION['rz2']['cliente']['nome'] = $dadosCliente['nome'];
                    $_SESSION['rz2']['cliente']['email'] = $dadosCliente['email'];

                    // verifica se tem redirect
                    if (isset($_REQUEST['redirect']) && $_REQUEST['redirect'] != '') {
                        header('Location: ' . URLRAIZ . $_REQUEST['redirect']);
                        exit;
                    } else {
                        return true;
                    }
                } else {
                    return false;
                }
            }
        }
    }

    private static function antiInjection($valor) {
        $txt = $valor;
        $txt = str_replace("'", "", $txt);
        $txt = str_replace(";", "", $txt);
        $txt = str_replace("#", "", $txt);
        $txt = str_replace("*", "", $txt);
        $txt = str_replace("%", "", $txt);
        $txt = str_replace("/", "", $txt);
        return trim($valor);
    }

    public static function validaSenha($senha) {
        $senha = trim($senha);
        if (strlen($senha) < 1 || strlen($senha) > 10) {
            return false;
        } else {
            $arrProibido = array(";", "#", "*", "%", "/");
            foreach ($arrProibido as $caracterProibido) {
                $existe = strpos($senha, $caracterProibido);
                if ($existe === false) {
                    // nao faz nada, ou seja, valida!
                } else {
                    return false;
                    break;
                }
            }
        }
        return true;
    }

    public static function validaEmailUnico($email) {
        $email = UtilObjeto::listar("cliente", "WHERE email = '" . trim($email) . "'");
        if (is_array($email)) {
            return false;
        }
        return true;
    }

    public static function trataSenha($senha) {
        $novaSenha = Cliente::antiInjection(trim($senha));
        return array('senha' => $novaSenha, 'senhamd5' => md5($novaSenha));
    }

    public static function verificaLogin() {
        if (!isset($_SESSION['rz2']['cliente'])) {
            header('Location: ' . URLRAIZ . 'login.php');
            exit;
        }
    }

    public function inserir() {
        if (parent::inserir()) {
            // exclui pre-cliente
            UtilObjeto::limpar("precliente", "WHERE email = '" . $this->email . "'");
            return true;
        } else {
            return false;
        }
    }

    public static function listar($filtro = "") {
        global $db;
        $sql = "SELECT   c.*, cid.nome cidade, est.nome estado, est.sigla
                    FROM      rz2_cliente c,
                                     rz2_cidade cid,
                                     rz2_estado est
                    WHERE    c.id_cidade = cid.id
                    AND         cid.id_estado = est.id
                    " . $filtro;
        // exit($sql);
        $rs = executaSql($sql);
        $arrLista = array();
        while ($rg = $rs->fetchRow()) {
            foreach ($rg as $campo => $valor) {
                $arrLista[$rg['id']][$campo] = $valor;
            }
        }
        return (count($arrLista) > 0) ? $arrLista : false;
    }

    public function excluir() {
        if ($this->permiteExcluir()) {
            return parent::excluir();
        } else {
            return false;
        }
    }

    public function permiteExcluir() {
        global $db;
        $arrTabelas = array('rz2_pedido');
        foreach ($arrTabelas as $tabela) {
            $sql = "SELECT count(*) total FROM   " . $tabela . " WHERE  id_cliente = " . $this->id;
            $rs = $db->query($sql);
            $rg = $rs->fetchRow();
            if ($rg['total'] > 0)
                return false;
        }
        return true;
    }

    public static function getNovaSenha() {
        $letras = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
        $letra1 = $letras[rand(0, 25)];
        $letra2 = $letras[rand(0, 25)];
        $letra3 = $letras[rand(0, 25)];
        $string = $letra1 . date('H') . $letra2 . date('i') . $letra3 . date('s');
        $md5 = md5($string);
        $novaSenha = substr($md5, 0, 6);
        return $novaSenha;
    }

    public static function buscaPorEmail($email) {
        global $db;
        $sql = "SELECT id FROM   rz2_cliente WHERE  email = '" . trim($email) . "' LIMIT  0,1";
        // exit($sql);
        $rs = executaSql($sql);
        if ($rg = $rs->fetchRow()) {
            return $rg['id'];
        } else {
            return false;
        }
    }

    public static function relatorioGeral($filtro = "") {
        global $db;
        $sql = "SELECT count(*) total
                    FROM   rz2_cliente c,
                    rz2_cidade cid,
                    rz2_estado est
                    WHERE  c.id_cidade = cid.id
                    AND    cid.id_estado = est.id
                    " . $filtro;
        // exit($sql);
        $rs = executaSql($sql);
        $arrLista = array();
        $i = 0;
        while ($rg = $rs->fetchRow()) {
            $i++;
            foreach ($rg as $campo => $valor) {
                $arrLista[$i][$campo] = $valor;
            }
        }
        return ($i > 0) ? $arrLista : false;
    }

    public static function relatorioPorPeriodo($tipo = "", $filtro = "") {
        global $db;

        switch ($tipo) {
            case 'd':
                $dateSelect = '%d/%m/%Y';
                $dateGroup = '%Y-%m-%d';
                break;
            case 'm':
                $dateSelect = '%m/%Y';
                $dateGroup = '%Y-%m';
                break;
            case 'a':
                $dateSelect = '%Y';
                $dateGroup = '%Y';
                break;
        }

        $sql = "SELECT  date_format(c.dt_cadastro,'%d') dia,
                                     date_format(c.dt_cadastro,'%m') mes,
                                     date_format(c.dt_cadastro,'%y') ano,
                                     date_format(c.dt_cadastro,'" . $dateSelect . "') valor, count(*) total
                     FROM      rz2_cliente c,
                                      rz2_cidade cid,
                                      rz2_estado est
                     WHERE    c.id_cidade = cid.id
                     AND      cid.id_estado = est.id " . $filtro . " GROUP BY date_format(c.dt_cadastro,'" . $dateGroup . "') ORDER BY c.dt_cadastro";
        // exit($sql);
        $rs = executaSql($sql);
        $arrLista = array();
        $i = 0;
        while ($rg = $rs->fetchRow()) {
            $i++;
            foreach ($rg as $campo => $valor) {
                $arrLista[$i][$campo] = $valor;
            }
        }
        return ($i > 0) ? $arrLista : false;
    }

    public static function relatorioPorLocalidade($tipo = "", $filtro = "") {
        global $db;

        switch ($tipo) {
            case 'c':
                $select = "concat(cid.nome,' - ',est.sigla) valor";
                $group = 'cid.nome';
                break;
            case 'e':
                $select = 'est.nome valor';
                $group = 'est.nome';
                break;
        }

        $sql = "SELECT * FROM(
        		SELECT   " . $select . ", count(*) total
				FROM     rz2_cliente c,
				         rz2_cidade cid,
				         rz2_estado est
				WHERE    c.id_cidade = cid.id
				AND      cid.id_estado = est.id
				" . $filtro . "
				GROUP BY " . $group . ") tb
				ORDER BY total DESC, valor";
        // exit($sql);
        $rs = executaSql($sql);
        $arrLista = array();
        $i = 0;
        while ($rg = $rs->fetchRow()) {
            $i++;
            foreach ($rg as $campo => $valor) {
                $arrLista[$i][$campo] = $valor;
            }
        }
        return ($i > 0) ? $arrLista : false;
    }

}
?>