<?php

//namespace App\Services;
namespace App\Control\Pix;

use App\Pix\Payload as PP;
use App\Pix\Sicoob_run as SP;
use Mpdf\QrCode\QrCode;
use Mpdf\QrCode\Output\Png;

class PixServiceRun
{

    public static function gerarPix($cpf, $nome, $valor, $tipo, $empresa)
    {
        $objPix = new SP();

        // Cria uma cobrança
        $cobranca = [
            'calendario' => [
                'expiracao' => 1440
            ],
            'devedor' => [
                'cpf' => $cpf,
                'nome' => $nome
            ],
            'valor' => [
                'original' => $valor
            ],
            'chave' => SICOOBPIX_CHAVE,
            'solicitacaoPagador' => $tipo,
            'empresa' => $empresa
        ];

        // Envia a cobrança para a API do Sicoob
        $resposta = $objPix->criarCob($cobranca);

        // Verifica se a cobrança foi criada com sucesso
        if (isset($resposta['location'])) {
            // Cria o payload do PIX
            $objPayload = (new PP)
                ->__set('titularConta', SICOOBPIX_TITULAR)
                ->__set('cidTitular', SICOOBPIX_CID_TITULAR)
                ->__set('cep', SICOOBPIX_CEP)
                ->__set('valor', $resposta['valor']['original'])
                ->__set('txid', $resposta['txid'])
                ->__set('url', $resposta['location'])
                ->__set('pagamentoUnico', true);

            // Gera o QR Code
            //$payloadQrCode = $objPayload->getPayloadQR();
            //$qrCode = new QrCode($payloadQrCode);
            // Qrcode gerado pelo próprio PSP
            $payloadQrCode = $resposta['brcode'];
            $qrCode = new QrCode($payloadQrCode);
            $image = (new Png)->output($qrCode, 350);

            // Retorna o QR Code e o código do PIX
            return [
                'qrcode' => base64_encode($image),
                'pix' => $payloadQrCode,
                'txid' => $resposta['txid']
            ];
        }

        return null;

    }

    public static function consultaPix($txid)
    {

        $objPix = new SP();

        $resposta = $objPix->consultCob($txid);

        //Consulta cobrança imediata através de parâmetros informados na requisição (filtros)
        //$parametros = ['inicio' => '2024-07-21T01:00:00-03:00', 'fim' => '2024-07-21T01:00:00-03:00', 'status' => 'CONCLUIDA']; // Consulte o site do Banco Central para outras opções de filtros
        //$resposta = $objPix->consultCob(null, $parametros);

        /**
         * Verificando se foi encontrada alguma cobrança de acordo com a consulta
         * payloadURL é um campo do objeto json presente na resposta (caso positiva) da consulta
         */
        if (isset($resposta['payloadURL'])) {
            return $resposta;
        } else {
            return null;        
        }

    }    

    public static function deletaPix($txid)
    {
        
        $objPix = new SP();

        $resposta = $objPix->cancelarCob($txid);

        //Consulta cobrança imediata através de parâmetros informados na requisição (filtros)
        //$parametros = ['inicio' => '2024-07-21T01:00:00-03:00', 'fim' => '2024-07-21T01:00:00-03:00', 'status' => 'CONCLUIDA']; // Consulte o site do Banco Central para outras opções de filtros
        //$resposta = $objPix->consultCob(null, $parametros);

        /**
         * Verificando se foi encontrada alguma cobrança de acordo com a consulta
         * payloadURL é um campo do objeto json presente na resposta (caso positiva) da consulta
         */
        if (isset($resposta['payloadURL'])) {
            return $resposta;
        } else {
            return null;        
        }

    } 


    public static function consultaPixPorPeriodo($inicio, $fim)
{
    $objPix = new SP();  // A classe SP deve lidar com a comunicação com o Sicoob

    // Parâmetros para filtrar transações entre as datas de início e fim
    $parametros = [
        'inicio' => $inicio,  // Exemplo: '2024-09-24T00:00:00-03:00'
        'fim' => $fim,
        'status' => 'CONCLUIDA'
    ];

    try {
        // Consulta os PIX no período definido
        $resposta = $objPix->consultCob(null, $parametros);

        // Verifica se houve resultados
        if (isset($resposta['cobs'])) {
            return $resposta['cobs']; // Retorna a lista de cobranças encontradas
        } else {
            return null; // Caso não haja resultados
        }
    } catch (Exception $e) {
        echo "Erro ao consultar por período: " . $e->getMessage();
        return null;
    }

}



}
