<?php
    include_once "conexao.php";

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 $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 inserir()
    {
        $sql = "insert into movimentacoes_pix (id_movimentacoes, chave, tipo, codigo_instituicao, nome_instituicao, agencia, conta,
                tipo_conta, nome, documento, valor, identificador, descricao)
                values(:id_movimentacoes, :chave, :tipo, :codigo_instituicao, :nome_instituicao, :agencia, :conta,
                :tipo_conta, :nome, :documento, :valor, :identificador, :descricao) ";
        $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->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 gravaPagamento()
    {
        $sql = "update movimentacoes_pix set data_pagamento = current_timestamp(), 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->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;
    }


}