<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Telegram\Bot\Api;
use Illuminate\Support\Facades\Log;
use App\Services\BaseService;
use DragonCode\PrettyArray\Services\Formatters\Base;

class SendTelegramMessageJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $chatId;
    public $text;
    public $buttons;
    public $image;
    public $isTop;

    /**
     * @param string $chatId
     * @param string $text
     * @param array $buttons
     * @param string|null $image
     */
    public function __construct($chatId, $text, $buttons = [], $image = null ,$isTop = false)
    {
        $this->chatId = $chatId;
        $this->text = $text;
        $this->buttons = $buttons;
        $this->image = $image;
        $this->isTop = $isTop;
    }

    public function handle()
    {
        try {
            BaseService::sendMessage($this->chatId ,$this->text, $this->buttons, $this->image);
        } catch (\Telegram\Bot\Exceptions\TelegramResponseException $e) {
            // 捕获 Too Many Requests
            if (str_contains($e->getMessage(), 'Too Many Requests')) {
                preg_match('/retry after (\d+)/', $e->getMessage(), $matches);
                $retryAfter = $matches[1] ?? 5;
                Log::warning("Telegram 429 限制，等待 {$retryAfter} 秒重试...");
                sleep($retryAfter + 1);

                // 重试
                $this->handle();
            } else {
                Log::error('Telegram 消息发送失败: '.$e->getMessage());
            }
        }
    }
}
