//go:build integration

package repository

import (
	"context"
	"time"

	"github.com/redis/go-redis/v9"
	"github.com/stretchr/testify/suite"
)

// IntegrationRedisSuite Redis 集成测试基础套件
// 所有 Redis 集成测试应嵌入此套件
type IntegrationRedisSuite struct {
	suite.Suite
	rdb  *redis.Client
	ctx  context.Context
	host string
	port string
}

// SetupSuite 连接 Redis
func (s *IntegrationRedisSuite) SetupSuite() {
	s.ctx = context.Background()
	s.host = "localhost"
	s.port = "6379"

	s.rdb = redis.NewClient(&redis.Options{
		Addr:         s.host + ":" + s.port,
		DialTimeout:  5 * time.Second,
		ReadTimeout:  3 * time.Second,
		WriteTimeout: 3 * time.Second,
		PoolSize:     10,
	})
}

// SetupTest 每个测试前清空数据库
func (s *IntegrationRedisSuite) SetupTest() {
	if s.rdb == nil {
		s.T().Skip("Redis not available, skipping integration test")
	}
	s.rdb.FlushDB(s.ctx)
}

// TearDownSuite 关闭连接
func (s *IntegrationRedisSuite) TearDownSuite() {
	if s.rdb != nil {
		s.rdb.Close()
	}
}

// Redis 返回的辅助方法
func (s *IntegrationRedisSuite) Redis() *redis.Client {
	return s.rdb
}

func (s *IntegrationRedisSuite) Context() context.Context {
	return s.ctx
}
