package main

import (
	"fmt"
	"jannex/telegram-bot-manager/modules/config"
	"jannex/telegram-bot-manager/modules/database"
	"jannex/telegram-bot-manager/modules/telegram"
	"jannex/telegram-bot-manager/modules/utils"
	"jannex/telegram-bot-manager/routers/router"
	"os"
	"time"

	"git.ex.umbach.dev/Alex/roese-utils/rsconfig"
	"git.ex.umbach.dev/Alex/roese-utils/rslogger"
	"github.com/gofiber/fiber/v2"
	"github.com/gofiber/fiber/v2/middleware/cors"
	"github.com/gofiber/fiber/v2/middleware/logger"

	tblogger "jannex/telegram-bot-manager/modules/logger"
)

func init() {
	rsconfig.CreateEnvConfigFileIfNotExists(`DEBUG=false
COLORIZED_OUTPUT=true
HOST=127.0.0.1
PORT=8080

LOG_MANAGER_SERVER_URL=http://localhost:50110

# MariaDB
MARIADB_HOSTNAME=127.0.0.1
MARIADB_PORT=3306
MARIADB_USERNAME=db_user
MARIADB_PASSWORD=db_password
MARIADB_DATABASE_NAME=db_database_name`)

	config.LoadConfig()
	rslogger.InitLogger(true, config.Cfg.ColorizedOutput, config.Cfg.LogManagerServerUrl)

	if os.Getenv("DOCKER") != "" {
		fmt.Println("Waiting for mariadb docker")
		time.Sleep(10 * time.Second)
	}

	database.InitDatabase()
	utils.ValidatorInit()
}

func main() {
	app := fiber.New()

	app.Use(cors.New())

	if config.Cfg.Debug {
		app.Use(logger.New(logger.Config{
			Format: "${pid} ${locals:requestid} ${status} - ${latency} ${method} ${path}​\n",
		}))
	}

	router.SetupRoutes(app)

	telegram.InitBot()

	tblogger.AddSystemLog(rslogger.LogTypeInfo, "Server started")

	app.Listen(config.Cfg.Host + ":" + config.Cfg.Port)
}

/*
func main() {
	// Setze deinen Telegram Bot Token hier ein
	bot, err := tgbotapi.NewBotAPI("6450280279:AAGxXdPv_YwRtl_pXIqYojqOecBrEjn3fJo")
	if err != nil {
		log.Panic(err)
	}

	bot.Debug = true

	log.Printf("Angemeldet als %s", bot.Self.UserName)

	// Erstelle eine Nachricht, die du senden möchtest
	msg := tgbotapi.NewMessage(935432572, "Das freut mich mein Hase. Ich liebe dich.")

	// Sende die Nachricht
	_, err = bot.Send(msg)
	if err != nil {
		log.Panic(err)
	}

	// Erstelle eine Update-Konfiguration, um auf eingehende Nachrichten zu reagieren
	updateConfig := tgbotapi.NewUpdate(0)
	updateConfig.Timeout = 60

	updates, err := bot.GetUpdatesChan(updateConfig)

	for update := range updates {
		if update.Message == nil {
			continue
		}

		chatID := update.Message.Chat.ID
		text := update.Message.Text

		log.Printf("[%s] %s", update.Message.From.UserName, text)

		// Hier kannst du auf die empfangene Nachricht reagieren
		// Zum Beispiel, eine Antwort senden
		reply := tgbotapi.NewMessage(chatID, "Du hast folgende Nachricht gesendet: "+text)
		_, err := bot.Send(reply)
		if err != nil {
			log.Panic(err)
		}
	}
}
*/
