<?php
 /**
   * Emitir QRCode para Pagamento de PIX
   *
   */

   define('_VALID_PHP', true);
	
	require_once('init.php');

    require_once "vendor/autoload.php";
    require_once "PSP/sicoob/admin/config.php";

    use Endroid\QrCode\QrCode;
    use \PSP\sicoob\app\Pix\Payload as PP;
    use \PSP\sicoob\app\Pix\Sicoob as SP;

    // use Endroid\QrCode\Builder\Builder;
    // use Endroid\QrCode\Writer\PngWriter;
    
    // use \PSP\sicoob\app\Pix\Payload as PP;
    // use \PSP\sicoob\app\Pix\Sicoob as SP;
    // use Mpdf\QrCode\QrCode;
    // use Mpdf\QrCode\Output\Png;

    //Instancia um objeto ApiSicoob com os dados iniciais configurados no construtor da classe
    $objPix = new SP();

    //recebe e atualiza as informacoes da venda sobre o pagamento
    $cpf_devedor = htmlspecialchars($_GET['cpf_devedor']);
    $nome_devedor = htmlspecialchars($_GET['nome_devedor']);
    $valor_raw = htmlspecialchars($_GET['valor_pix']);
    $valor_ponto = str_replace(',', '.', $valor_raw);
    $valor = number_format((float)$valor_ponto, 2, '.', ''); 
    $mensagem = htmlspecialchars($_GET['mensagem_pix']);
    $nome_empresa = htmlspecialchars($_GET['nome_empresa']);
    $id_pagamento = isset($_GET['id_pagamento']) ? (int)$_GET['id_pagamento'] : 0;
    $id_receita = isset($_GET['id_receita']) ? (int)$_GET['id_receita'] : 0;

    if ($id_receita>0) {
        $row_receita_pix = Core::getRowById("receita", $id_receita);
    } else {
        $row_receita_pix = $pagamento_pix->obterReceitaPixPorTipoPagamento($id_pagamento);
    }

    //Cria uma cobrança para ser enviada ao banco
    $cobranca = [
        'calendario' => [
            'expiracao' => 172800                                     //Tempo em segundos para expiração do qrCode
        ],
        'devedor' => [
            'cpf' => strval($cpf_devedor),                          //CPF ou CNPJ do devedor
            'nome' => strval($nome_devedor)                         //Nome do devedor ou razão social
        ],
        'valor' => [
            'original' => strval($valor)                            //Valor da transação
        ],
        'chave' => strval(SICOOBPIX_CHAVE),                         //Chave pix do beneficiário
        'solicitacaoPagador' => strval($mensagem)                   //Mensagem que pode ser enviada ao pagador para ser visualizada no momento de scanear o QR Code
    ];

    if (!isset($cpf_devedor) || empty($cpf_devedor) || !isset($nome_devedor) || empty($nome_devedor))
        unset($cobranca['devedor']);

    if (!empty($row_receita_pix->nossonumero)) {
        $resposta = $objPix->consultCob($row_receita_pix->nossonumero);
    } else {
        $resposta = $objPix->criarCob($cobranca);
    }

    if (isset($resposta['brcode'])) {

        if ($row_receita_pix && empty($row_receita_pix->nossonumero)) {
            $data_update = array(
                'nossonumero' => $resposta['txid']
            );
            $db->update("receita", $data_update, "id = " . $row_receita_pix->id);
        }

        // Gerando imagem do QR Code com a sintaxe da versão 3.x do endroid/qrcode
        $qrCode = new QrCode($resposta['brcode']);
        $qrCode->setSize(250);
        $qrCode->setWriterByName('png');
        
        $qrCodeBase64 = base64_encode($qrCode->writeString());
        $nome_empresa = $core->empresa;
        $valor = $resposta['valor']['original'];
        $status_pix = $resposta['status'];


    } elseif (isset($resposta['location'])) {

        $data_update = array(
            'nossonumero' => $resposta['txid']
        );
        
        if ($id_receita>0) {
            $db->update("receita", $data_update, "id = " . $id_receita);
        } else {
            $db->update("receita", $data_update, "id_pagamento = " . $id_pagamento);
        }
    
        // Instância principal do payload Pix
        /*
        Nao vou precisar do payload pix por enquanto

        $objPayload = (new PP)
        ->__set('titularConta', SICOOBPIX_TITULAR)         //nome do titular da conta (beneficiário)
        ->__set('cidTitular', SICOOBPIX_CID_TITULAR)       //cidade do titular da conta (evitar caracteres especiais)
        ->__set('valor', $resposta['valor']['original'])   //valor da transação conforme criação da cobrança imediata
        ->__set('txid', $resposta['txid'])                 //txid gerado automaticamente ao criar cobrança imediata
        ->__set('url', $resposta['location'])              //url do payload dinâmico
        ->__set('pagamentoUnico', true);                   //valor padrão "false" definido na classe Payload, só precisa ser informado caso queira alterar

        // Código de pagamento PIX
        $payloadQrCode = $objPayload->getPayload();
        */

        // Gerando imagem do QR Code
        // $result = Builder::create()
        //     ->writer(new PngWriter())
        //     ->data($resposta['brcode'])
        //     ->size(250)
        //     ->build();
        $qrCode = new QrCode($resposta['brcode']);
        $qrCode->setSize(250);
        $qrCode->setWriterByName('png');

        // Mostra imagem direto no navegador
        //header('Content-Type: ' . $result->getMimeType());
        //echo $result->getString();

        // Converte para base64 para embutir no HTML
        //$qrCodeBase64 = base64_encode($result->getString());
        $qrCodeBase64 = base64_encode($qrCode->writeString());

    } else {

        echo 'Problema ao gerar PIX<br>';
        echo 'Falha no pedido de criação do PIX pela API';
        echo '<br>Resposta------------------------------------<br>';
        echo '<pre>';
        print_r($resposta);
        echo '</pre>';
        echo '<br><br>';
        echo '<br>Cobranca------------------------------------<br>';
        echo '<pre>';
        var_dump($cobranca);
        echo '</pre>';
        echo '<br>';
        echo '<br>id_pagamento = '.$id_pagamento;
        echo '<br>id_receita = '.$id_receita;
        exit;

    }

?>

<html lang="pt-br">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>QrCode Pix Sicoob</title>
    </head>
    <body style="text-align: center">
        <h3><?php echo $nome_empresa; ?>
        <h3>PAGAMENTO VENDA</h3>
        
        <div id="payment-status" style="margin-top: 20px;"></div>

        <br>
        <div class="qr-code">
            <p>Escaneie o QR Code abaixo para pagar via PIX:</p>
            <img src="data:image/png;base64,<?= $qrCodeBase64 ?>" alt="QR Code PIX">
        </div>

        <br>

        Código pix: <br>
        <textarea id="inputChavePix" readonly style="width: 480px; height: 90px; resize: none; padding: 5px;"><?= $resposta['brcode'] ?></textarea>
        <br><br>
        <button id="btnCopiar">Copiar código PIX</button>
        <p id="mensagemCopia" style="display:none; color:green;">Código PIX copiado para a área de transferência!</p>

        <br><br>

        Valor do PIX: <?php echo moeda($resposta['valor']['original']); ?>

        <script type="text/javascript">
            document.getElementById('btnCopiar').addEventListener('click', function() {
                var textoParaCopiar = document.getElementById('inputChavePix');
                navigator.clipboard.writeText(textoParaCopiar.value).then(function() {
                    var mensagem = document.getElementById('mensagemCopia');
                    mensagem.style.display = 'block'; // Mostra a mensagem de sucesso

                    setTimeout(function() {
                    mensagem.style.display = 'none';
                    }, 2000);
                }).catch(function(err) {
                /* Erro! */
                console.error('Não foi possível copiar o texto: ', err);
                alert('Ocorreu um erro ao tentar copiar.');
                });
            });

            // --- Início do script de verificação de pagamento ---
            const txid = "<?= $resposta['txid'] ?>";
            const paymentStatusDiv = document.getElementById('payment-status');
            
            const intervalId = setInterval(() => {
                fetch(`verificar_pix.php?txid=${txid}`)
                    .then(response => response.json())
                    .then(data => {
                        if (data.status === 'success' && data.pix_status === 'CONCLUIDA') {
                            // PIX foi pago!
                            clearInterval(intervalId); // Para de verificar
                            paymentStatusDiv.innerHTML = '<h1 style="color: green; display: flex; align-items: center; justify-content: center;"><svg width="68" height="68" viewBox="0 0 24 24" style="margin-right: 10px;"><circle cx="12" cy="12" r="11" fill="green" /><path d="M7 13l3 3 7-7" stroke="white" stroke-width="2" fill="none" /></svg>Pagamento Aprovado!</h1><p>Você será redirecionado em breve...</p>';

                        } else if (data.status === 'error') {
                            console.error('Erro ao verificar status do PIX:', data.message);
                        }
                    })
                    .catch(error => {
                        console.error('Erro na requisição de verificação:', error);
                    });
            }, 5000); // Verifica a cada 5 segundos (5000 milissegundos)

        </script>
    </body>
</html>