package ru.kayashov.bar.bot.config;

import org.telegram.telegrambots.meta.api.objects.CallbackQuery;
import org.telegram.telegrambots.meta.api.objects.Chat;
import org.telegram.telegrambots.meta.api.objects.Message;
import org.telegram.telegrambots.meta.api.objects.Update;
import org.telegram.telegrambots.meta.api.objects.replykeyboard.InlineKeyboardMarkup;
import org.telegram.telegrambots.meta.api.objects.replykeyboard.ReplyKeyboardMarkup;
import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.InlineKeyboardButton;
import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.KeyboardRow;
import ru.kayashov.bar.bot.domain.model.AbstractCallbackQuery;
import ru.kayashov.bar.bot.domain.model.AbstractChat;
import ru.kayashov.bar.bot.domain.model.AbstractKeyboard;
import ru.kayashov.bar.bot.domain.model.AbstractKeyboardButton;
import ru.kayashov.bar.bot.domain.model.AbstractMessage;
import ru.kayashov.bar.bot.domain.model.AbstractUpdate;

import java.util.List;

public interface TelegramBotMapper {

    AbstractUpdate toAbstractUpdate(Update update);

    AbstractMessage toAbstractMessage(Message message);

    AbstractCallbackQuery toAbstractCallbackQuery(CallbackQuery query);

    AbstractChat toAbstractChat(Chat chat);

    InlineKeyboardMarkup toInlineKeyboard(AbstractKeyboard replyKeyboard);

    ReplyKeyboardMarkup toReplyKeyboard(AbstractKeyboard replyKeyboard);

    List<List<InlineKeyboardButton>> toInlineKeyboard(List<List<AbstractKeyboardButton>> buttons);

    List<InlineKeyboardButton> toListButtons(List<AbstractKeyboardButton> buttons);

    List<KeyboardRow> toKeyboardRows(List<List<AbstractKeyboardButton>> rows);

    KeyboardRow toKeyboardRow(List<AbstractKeyboardButton> row);
}
