<?php
    include_once "conexao.php";

error_reporting(E_ALL ^ E_NOTICE);

date_default_timezone_set('America/Sao_Paulo');

class MovimentacoesPixClass
{
    private $con;
    private $pdo;

    private $id;
    private $id_movimentacoes;
    private $chave;
    private $tipo;
    private $codigo_instituicao;
    private $nome_instituicao;
    private $agencia;
    private $conta;
    private $tipo_conta;
    private $nome;
    private $documento;
    private $valor;
    private $identificador;
    private $descricao;
    private $data_pagamento;
    private $payment_id;
    private $end_to_end;

    private $celular;
    private $email;

    private $cartaoDigIni;
    private $cartaoDigFim;

    private $ipUser;

    private $numeroCap;
    private $idDocumento;
    private $idAssinatura;

    private $valorTitulo;

    private $retorno;
    private $mensagemRetorno;

    public function __construct()
    {
        $this->con = new Conexao();
        $this->pdo = $this->con->getConexao();
    }

    public function getPorId()
    {
        $sql = "select * from movimentacoes_pix
                where id =:id";
        $resultado = $this->pdo->prepare($sql);
        $resultado->bindParam(":id", $this->getId(), PDO::PARAM_INT);
        $resultado->execute();

        return $resultado;
    }

    public function getPorIdMovimentacao()
    {
        $sql = "select * from movimentacoes_pix
                where id_movimentacoes =:id";
        $resultado = $this->pdo->prepare($sql);
        $resultado->bindParam(":id", $this->getIdMovimentacoes(), PDO::PARAM_INT);
        $resultado->execute();

        return $resultado;
    }

    public function getPorIdDocumentoClickSign()
    {
        $sql = "select * from movimentacoes_pix
                where id_documento =:id";
        $resultado = $this->pdo->prepare($sql);
        $resultado->bindParam(":id", $this->getIdDocumento(), PDO::PARAM_STR);
        $resultado->execute();

        return $resultado;
    }

    public function getPorIdAssinaturaClickSign()
    {
        $sql = "select * from movimentacoes_pix
                where id_assinatura =:id";
        $resultado = $this->pdo->prepare($sql);
        $resultado->bindParam(":id", $this->getIdAssinatura(), PDO::PARAM_STR);
        $resultado->execute();

        return $resultado;
    }

    public function getPorNumeroCap()
    {
        $sql = "select * from movimentacoes_pix
                where numero_cap =:id";
        $resultado = $this->pdo->prepare($sql);
        $resultado->bindParam(":id", $this->getNumeroCap(), PDO::PARAM_STR);
        $resultado->execute();

        return $resultado;
    }

    public function inserir()
    {
        $sql = "insert into movimentacoes_pix (id_movimentacoes, chave, tipo, codigo_instituicao, nome_instituicao, agencia, conta,
                tipo_conta, nome, documento, valor, identificador, descricao, celular, email, cartao_digini, cartao_digfim, numero_cap, valor_titulo)
                values(:id_movimentacoes, :chave, :tipo, :codigo_instituicao, :nome_instituicao, :agencia, :conta,
                :tipo_conta, :nome, :documento, :valor, :identificador, :descricao, :celular, :email, :cartao_digini, :cartao_digfim, :numero_cap, :valor_titulo) ";
        $resultado = $this->pdo->prepare($sql);
        $resultado->bindParam(":id_movimentacoes", $this->getIdMovimentacoes(), PDO::PARAM_INT);
        $resultado->bindParam(":chave", $this->getChave(), PDO::PARAM_STR);
        $resultado->bindParam(":tipo", $this->getTipo(), PDO::PARAM_STR);
        $resultado->bindParam(":codigo_instituicao", $this->getCodigoInstituicao(), PDO::PARAM_STR);
        $resultado->bindParam(":nome_instituicao", $this->getNomeInstituicao(), PDO::PARAM_STR);
        $resultado->bindParam(":agencia", $this->getAgencia(), PDO::PARAM_STR);
        $resultado->bindParam(":conta", $this->getConta(), PDO::PARAM_STR);
        $resultado->bindParam(":tipo_conta", $this->getTipoConta(), PDO::PARAM_STR);
        $resultado->bindParam(":nome", $this->getNome(), PDO::PARAM_STR);
        $resultado->bindParam(":documento", $this->getDocumento());
        $resultado->bindParam(":valor", $this->getValor());
        $resultado->bindParam(":identificador", $this->getIdentificador(), PDO::PARAM_STR);
        $resultado->bindParam(":descricao", $this->getDescricao(), PDO::PARAM_STR);
        $resultado->bindParam(":celular", $this->getCelular(), PDO::PARAM_STR);
        $resultado->bindParam(":email", $this->getEmail(), PDO::PARAM_STR);
        $resultado->bindParam(":cartao_digini", $this->getCartaoDigIni(), PDO::PARAM_STR);
        $resultado->bindParam(":cartao_digfim", $this->getCartaoDigFim(), PDO::PARAM_STR);
        $resultado->bindParam(":numero_cap", $this->getNumeroCap(), PDO::PARAM_STR);
        $resultado->bindParam(":valor_titulo", $this->getValorTitulo());

        $resultado->execute();

        if ($resultado){
            $this->setId($this->pdo->lastInsertId());
            $this->setRetorno("OK");
            $this->setMensagemRetorno("");
        }else{
            $this->setRetorno("ERRO");
            $this->setMensagemRetorno("Ocorreu um erro durante a inserção de dados.");
        }

        return $resultado;
    }

    public function alterarDadosContaPorIdMovimentacoes()
    {
        $sql = "update movimentacoes_pix set codigo_instituicao =:codigo_instituicao, 
                nome_instituicao =:nome_instituicao, agencia =:agencia, conta =:conta,
                tipo_conta =:tipo_conta, nome =:nome, documento =:documento, celular =:celular
                where id_movimentacoes =:id";
        $resultado = $this->pdo->prepare($sql);
        $resultado->bindParam(":id", $this->getIdMovimentacoes(), PDO::PARAM_INT);
        $resultado->bindParam(":codigo_instituicao", $this->getCodigoInstituicao(), PDO::PARAM_STR);
        $resultado->bindParam(":nome_instituicao", $this->getNomeInstituicao(), PDO::PARAM_STR);
        $resultado->bindParam(":agencia", $this->getAgencia(), PDO::PARAM_STR);
        $resultado->bindParam(":conta", $this->getConta(), PDO::PARAM_STR);
        $resultado->bindParam(":tipo_conta", $this->getTipoConta(), PDO::PARAM_STR);
        $resultado->bindParam(":nome", $this->getNome(), PDO::PARAM_STR);
        $resultado->bindParam(":documento", $this->getDocumento());
        $resultado->bindParam(":celular", $this->getCelular(), PDO::PARAM_STR);

        $resultado->execute();

        return $resultado;
    }

    public function gravaPagamento()
    {
        $dataServer = date('Y-m-d H:i:s');

        $sql = "update movimentacoes_pix set data_pagamento =:data_pagamento, payment_id =:pay, end_to_end =:endTo 
                where id =:id";

        $resultado = $this->pdo->prepare($sql);
        $resultado->bindParam(":id", $this->getId(), PDO::PARAM_INT);
        $resultado->bindParam(":pay", $this->getPaymentId(), PDO::PARAM_INT);
        $resultado->bindParam(":endTo", $this->getEndToEnd(), PDO::PARAM_STR);
        $resultado->bindParam(":data_pagamento", $dataServer);
        $resultado->execute();

        return $resultado;
    }

    public function gravaIPUser()
    {
        $sql = "update movimentacoes_pix set ip_user =:ipUser
                where id =:id";

        $resultado = $this->pdo->prepare($sql);
        $resultado->bindParam(":id", $this->getId(), PDO::PARAM_INT);
        $resultado->bindParam(":ipUser", $this->getIpUser(), PDO::PARAM_STR);
        $resultado->execute();

        return $resultado;
    }

    public function gravaDocClickSign()
    {
        $sql = "update movimentacoes_pix set id_documento =:id_documento, id_assinatura =:id_assinatura
                where id =:id";

        $resultado = $this->pdo->prepare($sql);
        $resultado->bindParam(":id", $this->getId(), PDO::PARAM_INT);
        $resultado->bindParam(":id_documento", $this->getIdDocumento(), PDO::PARAM_STR);
        $resultado->bindParam(":id_assinatura", $this->getIdAssinatura(), PDO::PARAM_STR);
        $resultado->execute();

        return $resultado;
    }

    /**
     * @return mixed
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * @param mixed $id
     */
    public function setId($id): void
    {
        $this->id = $id;
    }

    /**
     * @return mixed
     */
    public function getIdMovimentacoes()
    {
        return $this->id_movimentacoes;
    }

    /**
     * @param mixed $id_movimentacoes
     */
    public function setIdMovimentacoes($id_movimentacoes): void
    {
        $this->id_movimentacoes = $id_movimentacoes;
    }

    /**
     * @return mixed
     */
    public function getChave()
    {
        return $this->chave;
    }

    /**
     * @param mixed $chave
     */
    public function setChave($chave): void
    {
        $this->chave = $chave;
    }

    /**
     * @return mixed
     */
    public function getTipo()
    {
        return $this->tipo;
    }

    /**
     * @param mixed $tipo
     */
    public function setTipo($tipo): void
    {
        $this->tipo = $tipo;
    }

    /**
     * @return mixed
     */
    public function getCodigoInstituicao()
    {
        return $this->codigo_instituicao;
    }

    /**
     * @param mixed $codigo_instituicao
     */
    public function setCodigoInstituicao($codigo_instituicao): void
    {
        $this->codigo_instituicao = $codigo_instituicao;
    }

    /**
     * @return mixed
     */
    public function getNomeInstituicao()
    {
        return $this->nome_instituicao;
    }

    /**
     * @param mixed $nome_instituicao
     */
    public function setNomeInstituicao($nome_instituicao): void
    {
        $this->nome_instituicao = $nome_instituicao;
    }

    /**
     * @return mixed
     */
    public function getAgencia()
    {
        return $this->agencia;
    }

    /**
     * @param mixed $agencia
     */
    public function setAgencia($agencia): void
    {
        $this->agencia = $agencia;
    }

    /**
     * @return mixed
     */
    public function getConta()
    {
        return $this->conta;
    }

    /**
     * @param mixed $conta
     */
    public function setConta($conta): void
    {
        $this->conta = $conta;
    }

    /**
     * @return mixed
     */
    public function getTipoConta()
    {
        return $this->tipo_conta;
    }

    /**
     * @param mixed $tipo_conta
     */
    public function setTipoConta($tipo_conta): void
    {
        $this->tipo_conta = $tipo_conta;
    }

    /**
     * @return mixed
     */
    public function getNome()
    {
        return $this->nome;
    }

    /**
     * @param mixed $nome
     */
    public function setNome($nome): void
    {
        $this->nome = $nome;
    }

    /**
     * @return mixed
     */
    public function getDocumento()
    {
        return $this->documento;
    }

    /**
     * @param mixed $documento
     */
    public function setDocumento($documento): void
    {
        $this->documento = $documento;
    }

    /**
     * @return mixed
     */
    public function getValor()
    {
        return $this->valor;
    }

    /**
     * @param mixed $valor
     */
    public function setValor($valor): void
    {
        $this->valor = $valor;
    }

    /**
     * @return mixed
     */
    public function getIdentificador()
    {
        return $this->identificador;
    }

    /**
     * @param mixed $identificador
     */
    public function setIdentificador($identificador): void
    {
        $this->identificador = $identificador;
    }

    /**
     * @return mixed
     */
    public function getDescricao()
    {
        return $this->descricao;
    }

    /**
     * @param mixed $descricao
     */
    public function setDescricao($descricao): void
    {
        $this->descricao = $descricao;
    }

    /**
     * @return mixed
     */
    public function getDataPagamento()
    {
        return $this->data_pagamento;
    }

    /**
     * @param mixed $data_pagamento
     */
    public function setDataPagamento($data_pagamento): void
    {
        $this->data_pagamento = $data_pagamento;
    }

    /**
     * @return mixed
     */
    public function getPaymentId()
    {
        return $this->payment_id;
    }

    /**
     * @param mixed $payment_id
     */
    public function setPaymentId($payment_id): void
    {
        $this->payment_id = $payment_id;
    }

    /**
     * @return mixed
     */
    public function getEndToEnd()
    {
        return $this->end_to_end;
    }

    /**
     * @param mixed $end_to_end
     */
    public function setEndToEnd($end_to_end): void
    {
        $this->end_to_end = $end_to_end;
    }

    /**
     * @return mixed
     */
    public function getRetorno()
    {
        return $this->retorno;
    }

    /**
     * @param mixed $retorno
     */
    public function setRetorno($retorno): void
    {
        $this->retorno = $retorno;
    }

    /**
     * @return mixed
     */
    public function getMensagemRetorno()
    {
        return $this->mensagemRetorno;
    }

    /**
     * @param mixed $mensagemRetorno
     */
    public function setMensagemRetorno($mensagemRetorno): void
    {
        $this->mensagemRetorno = $mensagemRetorno;
    }

    /**
     * @return mixed
     */
    public function getCelular()
    {
        return $this->celular;
    }

    /**
     * @param mixed $celular
     */
    public function setCelular($celular): void
    {
        $this->celular = $celular;
    }

    /**
     * @return mixed
     */
    public function getEmail()
    {
        return $this->email;
    }

    /**
     * @param mixed $email
     */
    public function setEmail($email): void
    {
        $this->email = $email;
    }

    /**
     * @return mixed
     */
    public function getCartaoDigIni()
    {
        return $this->cartaoDigIni;
    }

    /**
     * @param mixed $cartaoDigIni
     */
    public function setCartaoDigIni($cartaoDigIni): void
    {
        $this->cartaoDigIni = $cartaoDigIni;
    }

    /**
     * @return mixed
     */
    public function getCartaoDigFim()
    {
        return $this->cartaoDigFim;
    }

    /**
     * @param mixed $cartaoDigFim
     */
    public function setCartaoDigFim($cartaoDigFim): void
    {
        $this->cartaoDigFim = $cartaoDigFim;
    }

    /**
     * @return mixed
     */
    public function getIpUser()
    {
        return $this->ipUser;
    }

    /**
     * @param mixed $ipUser
     */
    public function setIpUser($ipUser): void
    {
        $this->ipUser = $ipUser;
    }

    /**
     * @return mixed
     */
    public function getNumeroCap()
    {
        return $this->numeroCap;
    }

    /**
     * @param mixed $numeroCap
     */
    public function setNumeroCap($numeroCap): void
    {
        $this->numeroCap = $numeroCap;
    }

    /**
     * @return mixed
     */
    public function getIdDocumento()
    {
        return $this->idDocumento;
    }

    /**
     * @param mixed $idDocumento
     */
    public function setIdDocumento($idDocumento): void
    {
        $this->idDocumento = $idDocumento;
    }

    /**
     * @return mixed
     */
    public function getIdAssinatura()
    {
        return $this->idAssinatura;
    }

    /**
     * @param mixed $idAssinatura
     */
    public function setIdAssinatura($idAssinatura): void
    {
        $this->idAssinatura = $idAssinatura;
    }

    /**
     * @return mixed
     */
    public function getValorTitulo()
    {
        return $this->valorTitulo;
    }

    /**
     * @param mixed $valorTitulo
     */
    public function setValorTitulo($valorTitulo): void
    {
        $this->valorTitulo = $valorTitulo;
    }


}