<?php
    include_once "conexao.php";

class MovimentacoesBoletoClass
{
    private $con;
    private $pdo;

    private $id;
    private $id_movimentacoes;
    private $id_consulta;
    private $linha_digitabel;
    private $codigo_barras;
    private $nome;
    private $documento;
    private $valor_original;
    private $valor_total;
    private $valor_juros;
    private $valor_multa;
    private $valor_desconto;
    private $data_vencimento;
    private $data_pagamento;
    private $payment_id;

    private $retorno;
    private $mensagemRetorno;

    public function __construct()
    {
        $this->con = new Conexao();
        $this->pdo = $this->con->getConexao();
    }

    public function getPorId()
    {
        $sql = "select * from movimentacoes_boleto
                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_boleto
                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_boleto (id_movimentacoes, id_consulta, linha_digitabel, codigo_barras, nome, documento,
                valor_original, valor_total, valor_juros, valor_multa, valor_desconto, data_vencimento)
                values(:id_movimentacoes, :id_consulta, :linha_digitabel, :codigo_barras, :nome, :documento,
                        :valor_original, :valor_total, :valor_juros, :valor_multa, :valor_desconto, :data_vencimento) ";
        $resultado = $this->pdo->prepare($sql);
        $resultado->bindParam(":id_movimentacoes", $this->getIdMovimentacoes(), PDO::PARAM_INT);
        $resultado->bindParam(":id_consulta", $this->getIdConsulta(), PDO::PARAM_STR);
        $resultado->bindParam(":linha_digitabel", $this->getLinhaDigitabel(), PDO::PARAM_STR);
        $resultado->bindParam(":codigo_barras", $this->getCodigoBarras(), PDO::PARAM_STR);
        $resultado->bindParam(":nome", $this->getNome(), PDO::PARAM_STR);
        $resultado->bindParam(":documento", $this->getDocumento(), PDO::PARAM_STR);
        $resultado->bindParam(":valor_original", $this->getValorOriginal());
        $resultado->bindParam(":valor_total", $this->getValorTotal());
        $resultado->bindParam(":valor_juros", $this->getValorJuros());
        $resultado->bindParam(":valor_multa", $this->getValorMulta());
        $resultado->bindParam(":valor_desconto", $this->getValorDesconto());
        $resultado->bindParam(":data_vencimento", $this->getDataVencimento());

        $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_boleto set data_pagamento = current_timestamp(), payment_id =:pay 
                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->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 getIdConsulta()
    {
        return $this->id_consulta;
    }

    /**
     * @param mixed $id_consulta
     */
    public function setIdConsulta($id_consulta): void
    {
        $this->id_consulta = $id_consulta;
    }

    /**
     * @return mixed
     */
    public function getLinhaDigitabel()
    {
        return $this->linha_digitabel;
    }

    /**
     * @param mixed $linha_digitabel
     */
    public function setLinhaDigitabel($linha_digitabel): void
    {
        $this->linha_digitabel = $linha_digitabel;
    }

    /**
     * @return mixed
     */
    public function getCodigoBarras()
    {
        return $this->codigo_barras;
    }

    /**
     * @param mixed $codigo_barras
     */
    public function setCodigoBarras($codigo_barras): void
    {
        $this->codigo_barras = $codigo_barras;
    }

    /**
     * @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 getValorOriginal()
    {
        return $this->valor_original;
    }

    /**
     * @param mixed $valor_original
     */
    public function setValorOriginal($valor_original): void
    {
        $this->valor_original = $valor_original;
    }

    /**
     * @return mixed
     */
    public function getValorTotal()
    {
        return $this->valor_total;
    }

    /**
     * @param mixed $valor_total
     */
    public function setValorTotal($valor_total): void
    {
        $this->valor_total = $valor_total;
    }

    /**
     * @return mixed
     */
    public function getValorJuros()
    {
        return $this->valor_juros;
    }

    /**
     * @param mixed $valor_juros
     */
    public function setValorJuros($valor_juros): void
    {
        $this->valor_juros = $valor_juros;
    }

    /**
     * @return mixed
     */
    public function getValorMulta()
    {
        return $this->valor_multa;
    }

    /**
     * @param mixed $valor_multa
     */
    public function setValorMulta($valor_multa): void
    {
        $this->valor_multa = $valor_multa;
    }

    /**
     * @return mixed
     */
    public function getValorDesconto()
    {
        return $this->valor_desconto;
    }

    /**
     * @param mixed $valor_desconto
     */
    public function setValorDesconto($valor_desconto): void
    {
        $this->valor_desconto = $valor_desconto;
    }

    /**
     * @return mixed
     */
    public function getDataVencimento()
    {
        return $this->data_vencimento;
    }

    /**
     * @param mixed $data_vencimento
     */
    public function setDataVencimento($data_vencimento): void
    {
        $this->data_vencimento = $data_vencimento;
    }

    /**
     * @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 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;
    }


}