package handlers

import (
	"os"
	"time"

	"server/internal/models"

	"github.com/gofiber/fiber/v2"
	"gorm.io/gorm"
)

// GetQldtToken lấy token từ database, nếu không có sẽ lấy từ biến môi trường
func GetQldtToken(db *gorm.DB) string {
	var setting models.SystemSetting
	if err := db.Where("setting_key = ?", "QLDT_TOKEN").First(&setting).Error; err == nil && setting.SettingValue != "" {
		return setting.SettingValue
	}
	return os.Getenv("QLDT_TOKEN")
}

// GetQldtTokenHandler trả về token hiện tại (chỉ hỗ trợ phuocntb@rikkeiacademy.com)
func GetQldtTokenHandler(db *gorm.DB) fiber.Handler {
	return func(c *fiber.Ctx) error {
		email, _ := c.Locals("staffEmail").(string)
		if email != "phuocntb@rikkeiacademy.com" {
			return c.Status(fiber.StatusForbidden).JSON(fiber.Map{"error": "Bạn không có quyền truy cập thông tin này"})
		}

		token := GetQldtToken(db)
		return c.JSON(fiber.Map{"token": token})
	}
}

// SaveQldtTokenHandler lưu token mới vào database (chỉ hỗ trợ phuocntb@rikkeiacademy.com)
func SaveQldtTokenHandler(db *gorm.DB) fiber.Handler {
	return func(c *fiber.Ctx) error {
		email, _ := c.Locals("staffEmail").(string)
		if email != "phuocntb@rikkeiacademy.com" {
			return c.Status(fiber.StatusForbidden).JSON(fiber.Map{"error": "Bạn không có quyền thực hiện thao tác này"})
		}

		var body struct {
			Token string `json:"token"`
		}
		if err := c.BodyParser(&body); err != nil {
			return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Yêu cầu không hợp lệ"})
		}

		setting := models.SystemSetting{
			SettingKey:   "QLDT_TOKEN",
			SettingValue: body.Token,
			UpdatedAt:    time.Now(),
		}

		if err := db.Save(&setting).Error; err != nil {
			return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "Lỗi lưu cấu hình: " + err.Error()})
		}

		return c.JSON(fiber.Map{"ok": true, "message": "Đã cập nhật QLDT_TOKEN thành công"})
	}
}
