package logto

import (
	"gitee.ltd/lxh/wechat-robot/internal/config"
	"gitee.ltd/lxh/wechat-robot/internal/types"
	"github.com/gofiber/fiber/v2"
	"github.com/gofiber/fiber/v2/middleware/session"
	"github.com/gofiber/storage/redis/v3"
	logtoClient "github.com/logto-io/go/v2/client"
)

var storage *redis.Storage

// 实现Logto会话存储接口
var store *session.Store

// GetLogtoClient
// @description: 获取logto客户端
func GetLogtoClient(c *fiber.Ctx) (client *logtoClient.LogtoClient, err error) {
	if storage == nil {
		storage = redis.New(redis.Config{
			Host:     config.Scd.Redis.Host,
			Port:     config.Scd.Redis.Port,
			Password: config.Scd.Redis.Password,
			Database: config.Scd.Redis.DB,
			Reset:    false, // false：启动时不清除数据库，true：清除（请谨慎使用）
			// 如果需要，可以配置其他选项，如 TLS、PoolSize 等
		})
	}

	if store == nil {
		store = session.New(session.Config{
			Storage:      storage,
			KeyLookup:    "cookie:logto-session",
			CookieSecure: false, // 开发环境可设成false
		})
	}

	// 创建Logto客户端配置
	logtoConfig := config.Scd.Auth.Logto.GetLogtoClient()
	// 获取会话
	fiberSessionStorage := &types.LogtoSessionStorage{Store: store, Ctx: c}

	// 创建Logto客户端
	client = logtoClient.NewLogtoClient(logtoConfig, fiberSessionStorage)
	return
}
