<?php

namespace Dao;
use Conn\MySqlConnect;

/**
 * Description of Clientes
 *
 * @author Délio
 */
class Clientes {
    
    public $id;
    public $tipo;
    public $nome;
    public $situacao;
    public $email;
    public $cpf;
    public $rg;
    public $ie;
    public $sexo;
    public $data_nasc;
    public $est_civil;
    public $endereco;
    public $bairro;
    public $num_end;
    public $fk_id_cidade;
    public $complemento;
    public $telefone;
    public $fax;
    public $celular;
    public $senha;
    public $data_cadastro;
    public $data_alteracao;
    public $usuario_cadastro;
    public $usuario_alterou;
    public $status;

    function __construct($res = null) {
        $this->id = (int) 0;
        $this->tipo = (string) 'F';
        $this->nome = (string) '';
        $this->situacao = (string) 'A';
        $this->email = (string) '';
        $this->cpf = (string) '';
        $this->rg = (string) '';
        $this->ie = (string) '';
        $this->sexo = (string) 'M';
        $this->data_nasc = (string) '';
        $this->est_civil = (string) 'Solteiro(a)';
        $this->endereco = (string) '';
        $this->bairro = (string) '';
        $this->num_end = (string) '';
        $this->fk_id_cidade = (int) 0;
        $this->complemento = (string) '';
        $this->telefone = (string) '';
        $this->fax = (string) '';
        $this->celular = (string) '';
        $this->senha = (string) '';
        $this->data_cadastro = (string) date('Y-m-d H:i:s');
        $this->data_alteracao = (string) date('Y-m-d H:i:s');
        $this->usuario_cadastro = (int) 0;
        $this->usuario_alterou = (int) 0;
        $this->status = (string) 'A';
        $this->fill($res);
    }
    
    private function fill($res) {
        if ($res != null && $res instanceof \stdClass) {
            $this->id = (int) (isset($res->id) ? $res->id : 0);
            $this->tipo = (string) (isset($res->tipo) ? $res->tipo : 'F');
            $this->nome = (string) (isset($res->nome) ? $res->nome : '');
            $this->situacao = (string) (isset($res->situacao) ? $res->situacao : 'A');
            $this->email = (string) (isset($res->email) ? $res->email : '');
            $this->cpf = (string) (isset($res->cpf) ? $res->cpf : '');
            $this->rg = (string) (isset($res->rg) ? $res->rg : '');
            $this->ie = (string) (isset($res->ie) ? $res->ie : '');
            $this->sexo = (string) (isset($res->sexo) ? $res->sexo : 'M');
            $this->data_nasc = (string) (isset($res->data_nasc) ? $res->data_nasc : null);
            $this->est_civil = (string) (isset($res->est_civil) ? $res->est_civil : 'Solteiro(a)');
            $this->endereco = (string) (isset($res->endereco) ? $res->endereco : '');
            $this->bairro = (string) (isset($res->bairro) ? $res->bairro : '');
            $this->num_end = (string) (isset($res->num_end) ? $res->num_end : '');
            $this->fk_id_cidade = (int) (isset($res->fk_id_cidade) ? $res->fk_id_cidade : 0);
            $this->complemento = (string) (isset($res->complemento) ? $res->complemento : '');
            $this->telefone = (string) (isset($res->telefone) ? $res->telefone : '');
            $this->fax = (string) (isset($res->fax) ? $res->fax : '');
            $this->celular = (string) (isset($res->celular) ? $res->celular : '');
            $this->senha = (string) (isset($res->senha) ? $res->senha : '');
            $this->data_cadastro = (string) (isset($res->data_cadastro) ? $res->data_cadastro : date('Y-m-d H:i:s'));
            $this->data_alteracao = (string) (isset($res->data_alteracao) ? $res->data_alteracao : date('Y-m-d H:i:s'));
            $this->usuario_cadastro = (int) (isset($res->usuario_cadastrou) ? $res->usario_cadastrou : 0);
            $this->usuario_alterou = (int) (isset($res->usuario_alterou) ? $res->usuario_alterou : 0);
            $this->status = (string) (isset($res->status) ? $res->status : 'A');
        }
    }

    private function inserir(MySqlConnect $conecta) {
        $sql = $conecta->prepare("INSERT INTO clientes (tipo, nome, situacao, email, cpf, rg, ie, sexo, data_nasc, est_civil, endereco, bairro, num_end, "
                . "fk_id_cidade, complemento, telefone, fax, celular, senha, data_cadastro, usuario_cadastro, status) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, "
                . "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") or die($conecta->error);
        $sql->bind_param("sssssssssssssissssssis", $this->tipo, $this->nome, $this->situacao, $this->email, $this->cpf, $this->rg, $this->ie, $this->sexo, 
                $this->data_nasc, $this->est_civil, $this->endereco, $this->bairro, $this->num_end, $this->fk_id_cidade, $this->complemento, $this->telefone, 
                $this->fax, $this->celular, $this->senha, $this->data_cadastro, $this->usuario_cadastro, $this->status);
        if ($sql->execute()) {
            return json_encode(array('data' => 'Success', 'message' => 'Cliente Inserido com Sucesso!', 'id' => $sql->insert_id));
        }
        return json_encode(array('data' => 'Error', 'message' => $sql->error, 'id' => 0));
    }
    
    private function editar(MySqlConnect $conecta) {
        $sql = $conecta->prepare("UPDATE clientes SET tipo = ?, nome = ?, situacao = ?, email = ?, cpf = ?, rg = ?, ie = ?, sexo = ?, data_nasc = ?, "
                . "est_civil = ?, endereco = ?, bairro = ?, num_end = ?, fk_id_cidade = ?, complemento = ?, telefone = ?, fax = ?, celular = ?, senha = "
                . "?, data_alteracao = ?, usuario_alterou = ? WHERE id = ?") or die($conecta->error);
        $sql->bind_param("sssssssssssssissssssii", $this->tipo, $this->nome, $this->situacao, $this->email, $this->cpf, $this->rg, $this->ie, $this->sexo, 
                $this->data_nasc, $this->est_civil, $this->endereco, $this->bairro, $this->num_end, $this->fk_id_cidade, $this->complemento, $this->telefone, 
                $this->fax, $this->celular, $this->senha, $this->data_alteracao, $this->usuario_alterou, $this->id);
        if ($sql->execute()) {
            return json_encode(array('data' => 'Success', 'message' => 'Cliente Atualizado com Sucesso!', 'id' => $this->id));
        }
        return json_encode(array('data' => 'Error', 'message' => $sql->error, 'id' => $this->id));
    }
    
    function salvar(MySqlConnect $conecta) {
        if ($this->id == 0) {
            return $this->inserir($conecta);
        }
        return $this->editar($conecta);
    }
    
    function excluir(MySqlConnect $conecta) {
        $sql = $conecta->prepare("UPDATE clientes SET data_alteracao = ?, usuario_alterou = ?, status = ? WHERE id = ?") or die($conecta->error);
        $sql->bind_param("sisi", $this->data_alteracao, $this->usuario_alterou, $this->status, $this->id);
        if ($sql->execute()) {
            return json_encode(array('data' => 'Success', 'message' => 'Cliente Excluido com Sucesso!', 'id' => $this->id));
        }
        return json_encode(array('data' => 'Error', 'message' => $sql->error, 'id' => $this->id));
    }
    
    function getLista(MySqlConnect $conecta, $where = null) {
        $lst_clientes = array();
        $sql = $conecta->query("SELECT id, nome, situacao, email, cpf, telefone, celular FROM clientes WHERE status = 'A' $where") or die($conecta->error);
        while ($res = $sql->fetch_object()) {
            $lst_clientes[] = new Clientes($res);
        }
        return $lst_clientes;
    }
    
    function getClientePorId(MySqlConnect $conecta, $id) {
        $sql = $conecta->query("SELECT id, tipo, nome, situacao, email, cpf, rg, ie, sexo, data_nasc, est_civil, endereco, bairro, num_end, fk_id_cidade, "
                . "complemento, telefone, fax, celular, senha, data_cadastro, data_alteracao, usuario_cadastro, usuario_alterou FROM clientes WHERE "
                . "id = '$id' AND status = 'A'") or die($conecta->error);
        if ($sql->num_rows > 0) {
            $res = $sql->fetch_object();
            $this->fill($res);
        }
    }
}