package middleware

import (
	"strings"

	"gitee.ltd/lxh/wechat-robot/internal/config"
	"github.com/gofiber/fiber/v2"
)

// IsAuthenticated
// @description: 检查用户是否已登录
// @param c
// @return bool
func IsAuthenticated(c *fiber.Ctx) bool {
	token := c.Cookies("auth_token")
	if token == "" {
		return false
	}

	// 加载配置
	cfg, err := config.Load()
	if err != nil {
		return false
	}

	// 根据认证类型验证
	switch cfg.Auth.Type {
	case "password":
		// 对比token (简单实现，实际应用可能需要更复杂的验证)
		return token == cfg.Auth.Password.SecretKey
	case "logto":
		// 如果是Logto认证方式，检查token前缀，有前缀则认为已登录
		return strings.HasPrefix(token, "logto:")
	default:
		return false
	}
}

// Authenticate
// @description: 创建身份验证中间件
// @return fiber.Handler
func Authenticate() fiber.Handler {
	return func(c *fiber.Ctx) error {
		// 检查是否已登录
		if !IsAuthenticated(c) {
			return c.Redirect("/login")
		}
		return c.Next()
	}
}
