package main

import (
	"encoding/json"
	"fmt"
	"log"
	"strconv"

	"gitlab.com/DorianPeregrim/tbot"
)

func main() {
	// 1. Укажите токен вашего бота (получить у @BotFather)
	token := "6334889817:AAGxGWdzDD948l7Jcj06hmqiul128FP1JAs"

	// 2. Создаем клиент библиотеки
	client := tbot.NewClient(token)

	// Проверяем соединение с Telegram API
	botUser, err := client.GetMe()
	if err != nil {
		log.Fatalf("Не удалось подключиться к Telegram API: %v", err)
	}
	fmt.Printf("Бот успешно запущен! Имя: @%s\n", botUser.Username)

	// 3. Настраиваем Long Polling (получение обновлений)
	var offset int

	for {
		params := map[string]string{
			"offset":  strconv.Itoa(offset),
			"timeout": "30", // Таймаут long polling в секундах
		}

		// Библиотека не имеет готового метода для получения обновлений,
		// поэтому используем MakeRequest для прямого вызова getUpdates
		raw, err := client.MakeRequest("getUpdates", params)
		if err != nil {
			log.Printf("Ошибка при запросе обновлений: %v", err)
			continue
		}

		// Парсим полученный JSON (json.RawMessage) в срез структур Update
		var updates []tbot.Update
		if err := json.Unmarshal(raw, &updates); err != nil {
			log.Printf("Ошибка парсинга обновлений: %v", err)
			continue
		}

		// 4. Обрабатываем входящие сообщения
		for _, update := range updates {
			// Сдвигаем offset, чтобы Telegram не присылало уже обработанные сообщения
			if update.UpdateId >= offset {
				offset = update.UpdateId + 1
			}

			// Проверяем, что обновление содержит именно сообщение.
			// В структуре Update поле Message встроено (embedded), поэтому MessageId == 0 означает его отсутствие.
			if update.Message.MessageId != 0 {
				chatID := update.Message.Chat.Id
				text := update.Message.Text
				userName := update.Message.From.FirstName

				// Простая логика обработки команд
				switch text {
				case "/start":
					msg := fmt.Sprintf("Привет, %s! 👋\nЯ простой бот, написанный на Go с использованием tbot.", userName)
					client.SendMessage(chatID, msg, "", nil)

				case "/help":
					helpText := "Список команд:\n/start - Начать работу\n/help - Помощь\nПросто напиши что-нибудь, и я повторю за тобой (эхо-бот)."
					client.SendMessage(chatID, helpText, "", nil)

				default:
					// Эхо-режим: отправляем обратно текст пользователя
					reply := fmt.Sprintf("Вы сказали: %s", text)
					client.SendMessage(chatID, reply, "", nil)
                    // client.SendMessageDeferred(chatID, reply, "", nil, nil)
                    // client.SendMessageDeferred(chatID, reply, "", nil, nil)
                    // client.SendMessageDeferred(chatID, reply, "", nil, nil)
                    // client.SendMessageDeferred(chatID, reply, "", nil, nil)
                    // client.SendMessageDeferred(chatID, reply, "", nil, nil)
                    // client.SendMessageDeferred(chatID, reply, "", nil, nil)
				}
			}
		}
	}
}