package handlers

import (
	"bot/src/controllers"
	"fmt"

	tele "gopkg.in/telebot.v4"
)

type Handlers struct {
	DC *controllers.DataController
}

func NewHandlers(db *controllers.DataController) *Handlers {
	return &Handlers{DC: db}
}

func (d *Handlers) Dick(c tele.Context) error {
	var retMessage string

	id := c.Sender().ID
	lName := c.Sender().LastName
	fName := c.Sender().FirstName

	user := d.DC.GetUser(id)

	if user.ID == 0 {
		d.DC.CreateUser(id, lName, fName)
		user = d.DC.GetUser(id)
	}

	newRange := controllers.RandRange()
	newSize := user.DickSize + newRange

	if user.Blocked {
		retMessage = fmt.Sprintf("%s %s, ты уже отращивал свой писюн, следющая попытка будет после 22:00 по МСК.", fName, lName)
	} else {
		d.DC.UpdateDick(id, newSize)

		if newRange == 0 {
			retMessage = fmt.Sprintf("%s %s, твой писюн сегодня не подрос. Не переживай, просто он, видимо, решил взять выходной — пусть лучше отдохнет перед завтрашними подвигами!", fName, lName)
		} else if newRange > 0 {
			retMessage = fmt.Sprintf("%s %s, твой писюн сегодня подрос на %d см. Сейчас он равен %d см.", fName, lName, newRange, newSize)
		} else if newRange < 0 {
			retMessage = fmt.Sprintf("%s %s, твой писюн сегодня сократился на %d см. Сейчас он равен %d см.", fName, lName, -newRange, newSize)
		}
	}

	return c.Send(retMessage)
}

func (d *Handlers) TopDick(c tele.Context) error {
	var retMessage string
	users := d.DC.GetTopUsers()

	for iter, user := range users {
		retMessage += fmt.Sprintf("%d. %s %s, %d см\n", iter+1, user.FirstName, user.LastName, user.DickSize)
	}

	return c.Send(retMessage)
}

// func (d *Handlers) ClearStatistics(c tele.Context) error {
// 	var user models.User
// 	d.DC.DC.First(&user, c.Sender().ID)

// 	if user.IsAdmin {
// 		d.DC.DB.Model(&models.User{}).Update("dick_size", 0)
// 		return c.Send("Статистика очищена!")
// 	}

// 	return c.Send("Ты не админ!")
// }
