<?php
declare(strict_types=1);

require_once 'config.php';
require_once 'sigilopay.php';

/* =========================
   CONFIG SAFE
========================= */
$CONFIG = $CONFIG ?? (object)[
    'API_BASE' => 'https://app.sigilopay.com.br',
    'ENDPOINT' => '/api/v1/gateway/pix/receive',
    'PUBLIC_KEY' => PUBLIC_KEY,
    'SECRET_KEY' => SECRET_KEY,
    'CLIENT' => (object)[
        'name' => CLIENT_NAME,
        'email' => CLIENT_EMAIL,
        'phone' => CLIENT_PHONE,
        'document' => CLIENT_DOCUMENT
    ]
];

/* =========================
   DB
========================= */
$db = new PDO('sqlite:' . __DIR__ . '/database.sqlite');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$db->exec("
CREATE TABLE IF NOT EXISTS donations (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    telegram_id INTEGER,
    transaction_id TEXT UNIQUE,
    amount REAL,
    pix_code TEXT,
    payer_name TEXT,
    status TEXT DEFAULT 'PENDING',
    gateway_status TEXT,
    last_status TEXT,
    created_ip TEXT,
    paid_at DATETIME,
    expires_at DATETIME,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME
);
");

$db->exec("
CREATE TABLE IF NOT EXISTS donation_events (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    transaction_id TEXT,
    event TEXT,
    old_status TEXT,
    new_status TEXT,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
)
");

try {
    $db->exec("ALTER TABLE donations ADD COLUMN pix_code TEXT");
} catch (Exception $e) {}

try {
    $db->exec("ALTER TABLE donations ADD COLUMN expires_at DATETIME");
} catch (Exception $e) {}

try {
    $db->exec("ALTER TABLE donations ADD COLUMN payer_name TEXT");
} catch (Exception $e) {}

try {
    $db->exec("ALTER TABLE donations ADD COLUMN last_status TEXT");
} catch (Exception $e) {}

try {
    $db->exec("ALTER TABLE donations ADD COLUMN paid_at DATETIME");
} catch (Exception $e) {}

try {
    $db->exec("ALTER TABLE donations ADD COLUMN gateway_status TEXT");
} catch (Exception $e) {}

try {
    $db->exec("ALTER TABLE donations ADD COLUMN created_ip TEXT");
} catch (Exception $e) {}
try {
    $db->exec("CREATE INDEX IF NOT EXISTS idx_donations_status ON donations(status)");
} catch (Exception $e) {}

try {
    $db->exec("CREATE INDEX IF NOT EXISTS idx_donations_tx ON donations(transaction_id)");
} catch (Exception $e) {}

try {
    $db->exec("CREATE INDEX IF NOT EXISTS idx_donations_telegram ON donations(telegram_id)");
    } catch (Exception $e) {}
/* =========================
   STATE
========================= */
$stateFile = __DIR__ . '/state.json';
$state = file_exists($stateFile) ? json_decode(file_get_contents($stateFile), true) : [];

function saveState($state, $file) {
    file_put_contents($file, json_encode($state));
}

/* =========================
   TELEGRAM
========================= */
function tg($method, array $data = [])
{
    $ch = curl_init(TELEGRAM_API . '/' . $method);

    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $data,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_SSL_VERIFYPEER => true
    ]);

    $result = curl_exec($ch);

    if ($result === false) {
        error_log('Telegram error: ' . curl_error($ch));
    }

    curl_close($ch);
    return $result;
}

function send($chatId, $text, $keyboard = null)
{
    $data = [
        'chat_id' => $chatId,
        'text' => $text,
        'parse_mode' => 'HTML'
    ];

    if ($keyboard) {
        $data['reply_markup'] = json_encode($keyboard);
    }

    return tg('sendMessage', $data);
}

function sendPhoto($chatId, $file, $caption)
{
    return tg('sendPhoto', [
        'chat_id' => $chatId,
        'photo' => new CURLFile($file),
        'caption' => $caption,
        'parse_mode' => 'HTML'
    ]);
}




function sendTutorialMedia($chatId)
{
    $mediaDir = __DIR__ . '/media/';

    $files = [
        'tutorial.mp4' => 'video',
        'tutorial.gif' => 'animation',
        'tutorial.jpg' => 'photo',
        'tutorial.jpeg' => 'photo',
        'tutorial.png' => 'photo'
    ];

    foreach ($files as $file => $type) {

        $path = $mediaDir . $file;

        if (!file_exists($path)) {
            continue;
        }

        switch ($type) {

            case 'video':
                return tg('sendVideo', [
                    'chat_id' => $chatId,
                    'video' => new CURLFile($path),
                    'supports_streaming' => true
                ]);

            case 'animation':
                return tg('sendAnimation', [
                    'chat_id' => $chatId,
                    'animation' => new CURLFile($path)
                ]);

            case 'photo':
                return tg('sendPhoto', [
                    'chat_id' => $chatId,
                    'photo' => new CURLFile($path)
                ]);
        }
    }

    return false;
}

/* =========================
   STATUS
========================= */
function statusText(string $status): string
{
    return match ($status) {
        'PENDING' => '⏳ Aguardando',
        'COMPLETED', 'OK', 'PAID' => '✅ Pago',
        'EXPIRED' => '⌛ Expirado',
        'CANCELED' => '🚫 Cancelado',
        'FAILED' => '❌ Falhou',
        'REJECTED' => '🚫 Rejeitado',
        'REFUNDED' => '↩️ Estornado',
        'CHARGED_BACK' => '⚠️ Chargeback',
        default => $status
    };
}

/* =========================
   KEYBOARDS
========================= */
function homeKeyboard()
{
    return [
        'keyboard' => [

            [
                ['text' => '💰 Fazer doação']
            ],

            [
                ['text' => '📜 Histórico'],
                ['text' => '📊 Transparência']
            ],

            [
                ['text' => '⚠️ Avisos'],
                ['text' => '🆘 Sobre as Doações']
            ],

            [
                ['text' => '❓ Ajuda'],
                ['text' => '🧑‍💻 Suporte']
            ]

        ],
        'resize_keyboard' => true
    ];
}


function donationKeyboard()
{
    return [
        'inline_keyboard' => [

            [
                ['text' => 'R$ 5', 'callback_data' => 'donate_5'],
                ['text' => 'R$ 10', 'callback_data' => 'donate_10'],
                ['text' => 'R$ 20', 'callback_data' => 'donate_20']
            ],

            [
                ['text' => 'R$ 50', 'callback_data' => 'donate_50'],
                ['text' => 'R$ 100', 'callback_data' => 'donate_100'],
                ['text' => 'R$ 150', 'callback_data' => 'donate_150']
            ],

            [
                ['text' => 'R$ 200', 'callback_data' => 'donate_200'],
                ['text' => 'R$ 500', 'callback_data' => 'donate_500'],
                ['text' => 'R$ 1000', 'callback_data' => 'donate_1000']
            ],

            [
                ['text' => '📝 Valor personalizado', 'callback_data' => 'custom_value']
            ],

            [
                ['text' => '⬅️ Voltar', 'callback_data' => 'home']
            ]
        ]
    ];
}

/* =========================
   UPDATE
========================= */
$update = json_decode(file_get_contents("php://input"), true);
if (!$update) exit;

$cb = $update['callback_query'] ?? null;
$msg = $update['message']['text'] ?? null;

$chatId = $update['message']['chat']['id'] ?? ($cb['message']['chat']['id'] ?? null);

/* =========================
   CALLBACK
========================= */
if ($cb) { 

    $chatId = $cb['message']['chat']['id'];
    $data   = $cb['data'];
tg('answerCallbackQuery', [
    'callback_query_id' => $cb['id']
]);

if (str_starts_with($data, 'check_')) {

    $tx = str_replace('check_', '', $data);

[$okConsulta, $sigilo] = consultarPix($tx);

if (
    $okConsulta &&
    isset($sigilo['status']) &&
    strtoupper($sigilo['status']) === 'COMPLETED'
) {

    $db->prepare("
        UPDATE donations
        SET
            status = 'COMPLETED',
            gateway_status = 'COMPLETED',
            paid_at = CURRENT_TIMESTAMP,
            updated_at = CURRENT_TIMESTAMP
        WHERE transaction_id = ?
    ")->execute([$tx]);
}

       


    $stmt = $db->prepare("
        SELECT *
        FROM donations
        WHERE transaction_id = ?
        LIMIT 1
    ");

    $stmt->execute([$tx]);

    $donation = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$donation) {
        send($chatId, "❌ Transação não encontrada.");
        exit;
    }
    
   if (
    !empty($donation['expires_at']) &&
    strtotime($donation['expires_at']) < time() &&
    strtoupper($donation['status']) === 'PENDING'
) {

    $db->prepare("
        UPDATE donations
        SET
            status = 'EXPIRED',
            updated_at = CURRENT_TIMESTAMP
        WHERE transaction_id = ?
    ")->execute([$tx]);

    $donation['status'] = 'EXPIRED';
}

    $status = strtoupper($donation['status']);

switch ($status) {

    case 'PAID':
    case 'OK':
    case 'COMPLETED':

        send(
    $chatId,
    "🎉 <b>PAGAMENTO CONFIRMADO</b>\n\n" .

    "🆔 Transação:\n" .
    "<code>{$tx}</code>\n\n" .

    "💰 Valor:\n" .
    "R$ " . number_format($donation['amount'], 2, ',', '.') . "\n\n" .

    "📅 Registrado:\n" .
    date('d/m/Y H:i', strtotime($donation['created_at'])) . "\n\n" .

    "📌 Status:\n" .
    "✅ Pago\n\n" .

    "💚 Obrigado pela sua contribuição.\n" .
    "Sua doação foi registrada em nosso sistema de transparência."
);
break;

    case 'PENDING':

        send(
            $chatId,
            "⏳ Pagamento ainda não confirmado.\n\n" .
            "Aguardando compensação do PIX."
        );
        break;

    case 'EXPIRED':

        send(
            $chatId,
            "⌛ Este PIX expirou.\n\n" .
            "Gere uma nova doação para continuar."
        );
        break;

    case 'CANCELED':

        send(
            $chatId,
            "🚫 Esta transação foi cancelada."
        );
        break;

    case 'FAILED':

        send(
            $chatId,
            "❌ O pagamento falhou."
        );
        break;

    case 'REFUNDED':

        send(
            $chatId,
            "↩️ Esta doação foi estornada."
        );
        break;

    case 'CHARGED_BACK':

        send(
            $chatId,
            "⚠️ Esta transação sofreu chargeback."
        );
        break;

    default:

        send(
            $chatId,
            "ℹ️ Status atual: {$status}"
        );
}

    exit;
}

    if ($data === 'home') {

        send(
            $chatId,
            "💎 Menu Principal",
            homeKeyboard()
        );

        exit;
    }

    if (str_starts_with($data, 'donate_')) {

        $value = (float) str_replace('donate_', '', $data);

        [$ok, $pix] = criarPix($value);

        if (!$ok) {

            send(
                $chatId,
                "❌ Erro ao gerar PIX.\n\n{$pix}",
                homeKeyboard()
            );

            exit;
        }

        $tx       = $pix['transactionId'];
        $code     = $pix['pix']['code'];
        $qrBase64 = $pix['pix']['base64'];

file_put_contents(
    __DIR__ . '/pix_debug.log',
    '[' . date('d/m/Y H:i:s') . '] TX GERADO=' .
    $tx . PHP_EOL,
    FILE_APPEND | LOCK_EX
);

        if (!is_dir(__DIR__ . '/qrcodes')) {
            mkdir(__DIR__ . '/qrcodes', 0755, true);
        }

        $qrFile = __DIR__ . '/qrcodes/' . $tx . '.png';

        file_put_contents(
            $qrFile,
            base64_decode($qrBase64)
        );

        $stmt = $db->prepare("
    INSERT INTO donations
    (
        telegram_id,
        transaction_id,
        amount,
        pix_code,
        status,
        gateway_status,
        created_ip,
        expires_at
    )
    VALUES
    (
        ?,
        ?,
        ?,
        ?,
        'PENDING',
        'PENDING',
        ?,
        datetime('now','+30 minutes')
    )
");

$stmt->execute([
    $chatId,
    $tx,
    $value,
    $code,
    $_SERVER['REMOTE_ADDR'] ?? 'UNKNOWN'
]);

        sendPhoto(
    $chatId,
    $qrFile,
    "💚 <b>DOAÇÃO PIX GERADA</b>\n\n" .
    "💰 Valor: <b>R$ " .
    number_format($value, 2, ',', '.') .
    "</b>\n\n" .
    "📱 Escaneie o QR Code ou utilize o PIX Copia e Cola abaixo:\n\n" .
    "<code>{$code}</code>\n\n" .
    "🆔 Transação:\n<code>{$tx}</code>\n\n" .
    "⏳ Aguardando confirmação do pagamento."
);

send(
    $chatId,
    "👇 Após realizar o pagamento clique abaixo:",
    [
        'inline_keyboard' => [
            [
                [
                    'text' => '✅ Confirmar Pagamento',
                    'callback_data' => 'check_' . $tx
                ]
            ]
        ]
    ]
);

exit;
}

    if ($data === 'custom_value') {

        $state[$chatId] = [
            'awaiting_value' => true
        ];

        saveState($state, $stateFile);

        send(
            $chatId,
            "💰 Digite o valor desejado para a doação.\n\nExemplo: 25

valor mínimo suportado pelo Gateway R$2,00 pra valores menores somente através do suporte ⚠️"
        );

        exit;
    }
}


/* =========================
   MESSAGE
========================= */
if ($msg) {

    if ($msg === '/start') {

    sendTutorialMedia($chatId);

    send(
        $chatId,
        "💎 Bem-vindo ao Sistema de Doações PIX

As doações realizadas pela comunidade são contribuições voluntárias destinadas exclusivamente ao suporte, manutenção e aprimoramento do projeto. Esses recursos auxiliam em custos operacionais, desenvolvimento de novas funcionalidades, infraestrutura e demais melhorias que beneficiam todos os participantes. Nosso compromisso é atuar com responsabilidade, transparência e respeito à confiança de cada apoiador. As doações não são obrigatórias e representam uma forma de colaboração para garantir a continuidade, evolução e qualidade do projeto a longo prazo.",
        homeKeyboard()
    );

    exit;
}

    if ($msg === '💰 Fazer doação') {

        send(
            $chatId,
            "🫂 <b>DOAÇÃO PIX</b>\n\nEscolha um valor:",
            donationKeyboard()
        );

        exit;
    }

if ($msg === '⚠️ Avisos') {

    send(
        $chatId,
        "⚠️ <b>AVISOS IMPORTANTES SOBRE AS DOAÇÕES</b>\n\n" .

        "• Todas as doações para a comunidade são voluntárias e não obrigatórias.

• Caso sua doação seja destinada ao programa de monetização para pagamento dos desenvolvedores, informe essa finalidade juntamente com o comprovante da doação.

• Doações enviadas sem descrição ou identificação de destino poderão ser utilizadas para despesas e necessidades gerais da comunidade, conforme definido pela administração.

• Guarde seu comprovante e o ID da transação para eventuais verificações e suporte.

• Após o envio, a confirmação da doação pode levar alguns minutos, dependendo do método de pagamento utilizado.

• Para garantir transparência, os recursos do caixa de verbas e sua utilização poderão ser divulgados à comunidade por meio de comprovantes e registros quando forem utilizados.

• Não compartilhe comprovantes ou dados financeiros com terceiros.",

        homeKeyboard()
    );

    exit;
}

if ($msg === '🆘 Sobre as Doações') {

    send(
        $chatId,
        "🆘 <b>SOBRE AS DOAÇÕES</b>\n\n" .

        "Sua contribuição ajuda diretamente na manutenção do projeto.\n\n" .

        "💚 Custos de hospedagem\n" .
        "💚 Desenvolvimento de novas funções\n" .
        "💚 Correções e atualizações\n" .
        "💚 Infraestrutura e servidores\n\n" .

        "Este projeto só continua crescendo graças ao apoio da comunidade. As doações são totalmente voluntárias, mas cada contribuição, independentemente do valor, faz diferença para manter o projeto ativo, cobrir custos, implementar melhorias e garantir sua evolução a longo prazo.

Acreditamos na transparência e, por isso, é importante deixar claro que as doações não são uma obrigação nem uma forma de compra de benefícios. Elas representam um gesto de apoio de quem acredita no projeto e deseja contribuir para seu crescimento.

Se você gosta do que estamos construindo e quer ajudar a manter essa iniciativa por mais tempo, considere fazer uma doação. Mesmo o menor valor soma forças com outras contribuições e ajuda a transformar ideias em melhorias reais para toda a comunidade. Cada apoio conta, e somos sinceramente gratos por isso.",

        homeKeyboard()
    );

    exit;
}

if ($msg === '❓ Ajuda') {

    send(
        $chatId,
        "❓ <b>CENTRAL DE AJUDA</b>\n\n" .

        "💰 Fazer doação→ Gera um PIX para contribuição.\n" .
        "📜 Histórico → Mostra suas últimas doações.\n" .
        "📊 Transparência → Exibe as doações confirmadas.\n" .
        "⚠️ Avisos → Informações importantes.\n\n" .

        "Caso precise de suporte, entre em contato com nossa equipe.",

        homeKeyboard()
    );

    exit;
}

if ($msg === '🧑‍💻 Suporte') {

    send(
        $chatId,
        "🧑‍💻 <b>CENTRAL DE SUPORTE</b>\n\n" .

        "📩 Contato: https://t.me/SuporteFairxtreamServebot\n" .
        "👥 Grupo: https://t.me/FairxtreamServe\n" .
        "📢 Canal: https://t.me/FairxtreamServe_comunidade\n\n" .

        "Nossa equipe está pronta para ajudar você.",

        homeKeyboard()
    );

    exit;
}

    if (
        isset($state[$chatId]['awaiting_value']) &&
        $state[$chatId]['awaiting_value'] === true
    ) {

        $value = (float) str_replace(',', '.', trim($msg));

        if ($value < 2) {

            send(
                $chatId,
                "❌ Valor mínimo: R$ 2,00"
            );

            exit;
        }

        unset($state[$chatId]);
        saveState($state, $stateFile);

        [$ok, $pix] = criarPix($value);

        if (!$ok) {

            send(
                $chatId,
                "❌ Erro ao gerar PIX.\n\n{$pix}",
                homeKeyboard()
            );

            exit;
        }

        $tx       = $pix['transactionId'];
        $code     = $pix['pix']['code'];
        $qrBase64 = $pix['pix']['base64'];
        
        
file_put_contents(
    __DIR__ . '/pix_debug.log',
    '[' . date('d/m/Y H:i:s') . '] TX GERADO=' .
    $tx . PHP_EOL,
    FILE_APPEND | LOCK_EX
);

        if (!is_dir(__DIR__ . '/qrcodes')) {
            mkdir(__DIR__ . '/qrcodes', 0755, true);
        }

        $qrFile = __DIR__ . '/qrcodes/' . $tx . '.png';

        file_put_contents(
            $qrFile,
            base64_decode($qrBase64)
        );

        $db->prepare("
    INSERT INTO donations
(
    telegram_id,
    transaction_id,
    amount,
    pix_code,
    status,
    gateway_status,
    created_ip,
    expires_at
)
VALUES
(
    ?,
    ?,
    ?,
    ?,
    'PENDING',
    'PENDING',
    ?,
    datetime('now','+30 minutes')
)
")->execute([
    $chatId,
    $tx,
    $value,
    $code,
    $_SERVER['REMOTE_ADDR'] ?? 'UNKNOWN'
]);

        sendPhoto(
    $chatId,
    $qrFile,
    "💚 <b>DOAÇÃO PIX GERADA</b>\n\n" .
    "💰 Valor: <b>R$ " .
    number_format($value, 2, ',', '.') .
    "</b>\n\n" .
    "📱 Escaneie o QR Code ou utilize o PIX Copia e Cola abaixo:\n\n" .
    "<code>{$code}</code>\n\n" .
    "🆔 Transação:\n<code>{$tx}</code>\n\n" .
    "⏳ Aguardando confirmação do pagamento."
);

send(
    $chatId,
    "👇 Após realizar o pagamento clique abaixo:",
    [
        'inline_keyboard' => [
            [
                [
                    'text' => '✅ Confirmar Pagamento',
                    'callback_data' => 'check_' . $tx
                ]
            ]
        ]
    ]
);

exit;
}

   if ($msg === '📊 Transparência') {

    $rows = $db->query("
        SELECT *
        FROM donations
        WHERE status IN ('PAID','OK','COMPLETED')
        ORDER BY id DESC
        LIMIT 10
    ")->fetchAll(PDO::FETCH_ASSOC);

    if (empty($rows)) {

    send(
        $chatId,
        "📊 Ainda não existem doações confirmadas.",
        homeKeyboard()
    );

    exit;
}

        $rows = $db->query("
    SELECT
        transaction_id,
        amount,
        status,
        created_at,
        updated_at,
        paid_at,
        expires_at
    FROM donations
    WHERE status != 'PENDING'
    ORDER BY id DESC
    LIMIT 50
")->fetchAll(PDO::FETCH_ASSOC);

       $txt = "📊 <b>PORTAL DE TRANSPARÊNCIA</b>\n\n";

$total = $db->query("
SELECT COALESCE(SUM(amount),0)
FROM donations
WHERE status IN ('PAID','OK','COMPLETED')
")->fetchColumn();

$txt .=
"💰 Total arrecadado: <b>R$ " .
number_format($total,2,',','.') .
"</b>\n\n";

foreach ($rows as $r) {

    $txt .=
    "━━━━━━━━━━━━━━\n" .

    "🆔 Registro Público\n" .
    "<code>" .
    substr(hash('sha256',$r['transaction_id']),0,16) .
    "</code>\n\n" .

    "💰 Valor: R$ " .
    number_format($r['amount'],2,',','.') .
    "\n" .

    "📌 Status: " .
    statusText($r['status']) .
    "\n" .

    "📅 Criado: " .
    date('d/m/Y H:i',strtotime($r['created_at'])) .
    "\n";
if (!empty($r['paid_at'])) {

    $txt .=
    "💸 Pago: " .
    date('d/m/Y H:i', strtotime($r['paid_at'])) .
    "\n";
}

if (!empty($r['expires_at'])) {

    $txt .=
    "⌛ Expira: " .
    date('d/m/Y H:i', strtotime($r['expires_at'])) .
    "\n";
}

    if (!empty($r['updated_at'])) {

        $txt .=
        "🔄 Atualizado: " .
        date('d/m/Y H:i',strtotime($r['updated_at'])) .
        "\n";
    }

    $txt .= "\n";
}
        send(
            $chatId,
            $txt,
            homeKeyboard()
        );

        exit;
    }

if ($msg === '📜 Histórico') {

    $stmt = $db->prepare("
    SELECT
        transaction_id,
        amount,
        status,
        created_at,
        updated_at,
        paid_at,
        expires_at
    FROM donations
    WHERE telegram_id = ?
    ORDER BY id DESC
    LIMIT 10
");
   

    $stmt->execute([$chatId]);

    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

    if (empty($rows)) {

        send(
            $chatId,
            "📜 Nenhuma doação encontrada.",
            homeKeyboard()
        );

        exit;
    }

    $txt = "📜 <b>SEU HISTÓRICO</b>\n\n";

    
        foreach ($rows as $r) {

    $txt .=
    "━━━━━━━━━━━━━━\n" .

    "🆔 Transação\n" .
    "<code>{$r['transaction_id']}</code>\n\n" .

    "💰 Valor: <b>R$ " .
    number_format($r['amount'], 2, ',', '.') .
    "</b>\n" .

    "📌 Status: <b>" .
    statusText($r['status']) .
    "</b>\n" .

    "📅 Criada: " .
    date('d/m/Y H:i', strtotime($r['created_at'])) .
    "\n";


    if (!empty($r['paid_at'])) {

        $txt .=
        "💸 Pago: " .
        date('d/m/Y H:i', strtotime($r['paid_at'])) .
        "\n";
    }


    if (!empty($r['expires_at'])) {

        $txt .=
        "⌛ Expira: " .
        date('d/m/Y H:i', strtotime($r['expires_at'])) .
        "\n";
    }


    if (!empty($r['updated_at'])) {

        $txt .=
        "🔄 Atualizada: " .
        date('d/m/Y H:i', strtotime($r['updated_at'])) .
        "\n";
    }

    $txt .= "\n";
}

    send(
        $chatId,
        $txt,
        homeKeyboard()
    );

    exit;

    }
}