<?php

namespace Dao;
use Conn\MySqlConnect;

class Cadastro {
    
    public $id;
    public $nome;
    public $telefone;
    public $rg;
    public $cpf;
    public $email;
    public $endereco;
    public $cidade;
    public $estado;
	public $data_nascimento;
    public $dependentes;
    public $data_cadastro;
    public $usuario_cadastrou;
    public $data_alteracao;
    public $usuario_alterou;
    public $status;

    function __construct($res = null) {
        $this->id = (int) 0;
        $this->nome = (string) '';
        $this->telefone = (string) '';
        $this->rg = (string) '';
        $this->cpf = (string) '';
        $this->email = (string) '';
        $this->endereco = (string) '';
        $this->cidade = (string) '';
        $this->estado = (string) '';
		$this->data_nascimento = (string) '';
        $this->dependentes = (int) 0;
        $this->data_cadastro = (string) date('Y-m-d H:i:s');
        $this->usuario_cadastrou = (int) 0;
        $this->data_alteracao = (string) date('Y-m-d H:i:s');
        $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->nome = (string) (isset($res->nome) ? $res->nome : '');
            $this->telefone = (string) (isset($res->telefone) ? $res->telefone : '');
            $this->rg = (string) (isset($res->rg) ? $res->rg : '');
            $this->cpf = (string) (isset($res->cpf) ? $res->cpf : '');
            $this->email = (string) (isset($res->email) ? $res->email : '');
            $this->endereco = (string) (isset($res->endereco) ? $res->endereco : '');
            $this->cidade = (string) (isset($res->cidade) ? $res->cidade : '');
            $this->estado = (string) (isset($res->estado) ? $res->estado : '');
            $this->data_nascimento = (string) (isset($res->data_nascimento) ? $res->data_nascimento : '');
            $this->dependentes = (int) (isset($res->dependentes) ? $res->dependentes : 0);
            $this->data_cadastro = (string) (isset($res->data_cadastro) ? $res->data_cadastro : null);
            $this->usuario_cadastrou = (int) (isset($res->usuario_cadastrou) ? $res->usuario_cadastrou : 0);
            $this->data_alteracao = (string) (isset($res->data_alteracao) ? $res->data_alteracao : null);
            $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 cadastro (nome, telefone, rg, cpf, email, endereco, cidade, estado, data_nascimento, dependentes, data_cadastro, usuario_cadastrou, status) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") or die($conecta->error);

    $sql->bind_param("sssssssssiiss", $this->nome, $this->telefone, $this->rg, $this->cpf, $this->email, $this->endereco, $this->cidade, $this->estado, $this->data_nascimento, $this->dependentes, $this->data_cadastro, $this->usuario_cadastrou, $this->status);

    if ($sql->execute()) {
        return json_encode(['data' => 'Success', 'message' => 'Cadastro realizado com sucesso!', 'id' => $sql->insert_id]);
    }

    return json_encode(['data' => 'Error', 'message' => $sql->error, 'id' => 0]);
}

    
    private function editar(MySqlConnect $conecta) {
        $sql = $conecta->prepare("UPDATE cadastro SET nome = ?, telefone = ?, rg = ?, cpf = ?, email = ?, endereco = ?, cidade = ?, estado = ?, data_nascimento = ?, dependentes = ?, data_alteracao = ?, usuario_alterou = ?, status = ? WHERE id = ?") or die($conecta->error);
        $sql->bind_param("sssssssssisii", $this->nome, $this->telefone, $this->rg, $this->cpf, $this->email, $this->endereco, $this->cidade, $this->estado, $this->data_nascimento, $this->dependentes, $this->data_alteracao, $this->usuario_alterou, $this->status, $this->id);
        if ($sql->execute())
            return json_encode(['data' => 'Success', 'message' => 'Cadastro atualizado com sucesso!', 'id' => $this->id]);
        return json_encode(['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 cadastro 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(['data' => 'Success', 'message' => 'Cadastro excluído com sucesso!', 'id' => $this->id]);
        return json_encode(['data' => 'Error', 'message' => $sql->error, 'id' => $this->id]);
    }
    
    function getLista(MySqlConnect $conecta, $where = '') {
    $lst_cadastro = [];
    $sqlQuery = "SELECT * FROM cadastro WHERE status = 'A' $where";

    $sql = $conecta->query($sqlQuery) or die($conecta->error);
    while ($res = $sql->fetch_object()) {
        if ($res) {
            $lst_cadastro[] = new Cadastro($res);
        }
    }
    return $lst_cadastro;
}


    
    function getCadastroPorId(MySqlConnect $conecta, $id) {
    $sql = $conecta->query("SELECT * FROM cadastro WHERE id = '$id' AND status = 'A'") or die($conecta->error);
    if ($sql->num_rows > 0) {
        $res = $sql->fetch_object();
        $this->fill($res);
    }
}

}
