<?php
/**
 * Segunda Via de Cobrança PIX
 */

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

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

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

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

if ((!isset($_GET['txid']) || empty($_GET['txid'])) && (!isset($_GET['id_receita']) || empty($_GET['id_receita']))) {
    die('ID da transação (txid) não fornecido.');
}

$txid = (!isset($_GET['txid']) || empty($_GET['txid'])) ? 0 : htmlspecialchars($_GET['txid']);
$id_receita = (!isset($_GET['id_receita']) || empty($_GET['id_receita'])) ? 0 : htmlspecialchars($_GET['id_receita']);

try {
    $objPix = new SP();

    if ($txid) {
        $cobranca = $objPix->consultCob($txid);

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

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


        } else {
            echo '<h1>Problema ao consultar o PIX</h1>';
            echo '<br>';
            echo "txid=[$txid]";
            echo '<br>';
            echo "id_receita=[$id_receita]";
            echo '<br>';
            echo '<p>Não foi possível recuperar os dados da cobrança. Verifique se o pagamento já foi efetuado ou se a cobrança expirou.</p>';
            echo '<pre>';
            print_r($cobranca);
            echo '</pre>';
            exit;
        }
    } elseif ($id_receita>0) {
        $row_receita = Core::getRowById("receita", $id_receita);

        if (isset($row_receita) && $row_receita->nossonumero) {
            
            //Pix ja criado, deve somente apresentar sem atualizacao
            $cobranca = $objPix->consultCob($row_receita->nossonumero);

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

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


            } else {
                echo '<h1>Problema ao consultar o PIX</h1>';
                echo '<br>';
                echo "txid=[$row_receita->nossonumero]";
                echo '<br>';
                echo "id_receita=[$id_receita]";
                echo '<br>';
                echo '<p>Não foi possível recuperar os dados da cobrança. Verifique se o pagamento já foi efetuado ou se a cobrança expirou.</p>';
                echo '<pre>';
                print_r($cobranca);
                echo '</pre>';
                exit;
            }

        } else {

            $nome_empresa = $core->empresa;
            $mensagem_pix = $nome_empresa.' - Pagamento de venda';
            $status_pix = 0;
            $valor = number_format((float)$row_receita->valor_pago, 2, '.', '');

            $cobranca_pix = [
                'calendario' => [
                    'expiracao' => 3600                                     //Tempo em segundos para expiração do qrCode
                ],
                'valor' => [
                    'original' => strval($valor)                            //Valor da transação
                ],
                'chave' => strval(SICOOBPIX_CHAVE),                         //Chave pix do beneficiário
                'solicitacaoPagador' => strval($mensagem_pix)                   //Mensagem que pode ser enviada ao pagador para ser visualizada no momento de scanear o QR Code
            ];

            $cobranca = $objPix->criarCob($cobranca_pix);

            if (isset($cobranca['location'])) {
                if ($id_receita > 0) {
                    $data_update = array(
                        'nossonumero' => $cobranca['txid']
                    );
                    $db->update("receita", $data_update, "id = " . $id_receita);

                    $qrCode = new QrCode($cobranca['brcode']);
                    $qrCode->setSize(250);
                    $qrCode->setWriterByName('png');
                    $qrCodeBase64 = base64_encode($qrCode->writeString());

                }
            
            }
        }
    }

    
} catch (Exception $e) {
    die('Erro ao comunicar com a API do PIX: ' . $e->getMessage());
}
?>

<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>Segunda Via - QrCode Pix</title>
    </head>
    <body style="text-align: center">
        <h3><?php echo $nome_empresa; ?></h3>
        <h3>PAGAMENTO VENDA</h3>
        
        <div id="payment-status" style="margin-top: 20px;">
            <?php if ($status_pix === 'CONCLUIDA'): ?>
                <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ê pode fechar esta janela.</p>
            <?php endif; ?>
        </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;"><?= $cobranca['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($valor); ?>

        <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';
                    setTimeout(function() { mensagem.style.display = 'none'; }, 2000);
                }).catch(function(err) { 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 = "<?= $txid ?>";
            const paymentStatusDiv = document.getElementById('payment-status');
            const statusInicial = "<?= $status_pix ?>";

            if (statusInicial !== 'CONCLUIDA') {
                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ê pode fechar esta janela.</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>