// i2_bot – Instinct PokememBro Bot
// Copyright (c) 2017 Vladimir "fat0troll" Hodakov

package reminder

import (
	"github.com/go-telegram-bot-api/telegram-bot-api"
	"lab.pztrn.name/fat0troll/i2_bot/lib/dbmapping"
	"strconv"
)

func (r *Reminder) getRemindersForUser(playerRaw *dbmapping.Player) ([]dbmapping.Alarm, bool) {
	alarmsList := []dbmapping.Alarm{}

	err := c.Db.Select(&alarmsList, "SELECT * FROM alarms WHERE player_id=?", playerRaw.ID)
	if err != nil {
		c.Log.Error(err.Error())
		return alarmsList, false
	}

	return alarmsList, true
}

func (r *Reminder) formatRemindersButtons(playerRaw *dbmapping.Player) tgbotapi.InlineKeyboardMarkup {
	currentAlarms, _ := r.getRemindersForUser(playerRaw)

	alarmExist := make(map[string]string)
	for i := range currentAlarms {
		alarmExist[strconv.Itoa(currentAlarms[i].TurnirNumber)] = "enabled"
	}

	keyboard := tgbotapi.InlineKeyboardMarkup{}
	rows := make(map[int][]tgbotapi.InlineKeyboardButton)
	rows[0] = []tgbotapi.InlineKeyboardButton{}
	rows[1] = []tgbotapi.InlineKeyboardButton{}
	rows[2] = []tgbotapi.InlineKeyboardButton{}
	for i := 1; i <= 12; i++ {
		hours := 2 * (i - 1)
		if alarmExist[strconv.Itoa(i)] != "" {
			hoursStr := "✅ "
			hoursStr += strconv.Itoa(hours) + ":55"
			btn := tgbotapi.NewInlineKeyboardButtonData(hoursStr, "disable_reminder_"+strconv.Itoa(i))
			rows[(i-1)/4] = append(rows[(i-1)/4], btn)
		} else {
			hoursStr := "🚫 "
			hoursStr += strconv.Itoa(hours) + ":55"
			btn := tgbotapi.NewInlineKeyboardButtonData(hoursStr, "enable_reminder_"+strconv.Itoa(i))
			rows[(i-1)/4] = append(rows[(i-1)/4], btn)
		}
	}

	for i := range rows {
		keyboard.InlineKeyboard = append(keyboard.InlineKeyboard, rows[i])
	}

	return keyboard
}

func (r *Reminder) formatRemindersMessageText(playerRaw *dbmapping.Player) string {
	message := "*Ваши напоминания о битвах:*\n"
	message += "За пять минут до битвы бот может присылать вам в личные сообщения напоминание о том, "
	message += "что битва скоро состоится, и стоит встать на атаку.\n"
	message += "Кнопками ниже вы можете настроить, к каким из битв вас оповещать. Время московское.\n\n"

	currentAlarms, ok := r.getRemindersForUser(playerRaw)
	if !ok {
		message += "Не удалось получить настройки оповещений из базы. Ошибка."
	} else {
		message += "Установлено оповещений: " + strconv.Itoa(len(currentAlarms))
	}

	return message
}