package cache

import (
	"context"
	"fmt"

	"codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend/config"
	"github.com/redis/go-redis/v9"
	"go.uber.org/zap"
)

// ProvideRedisClient creates a new Redis client
func ProvideRedisClient(cfg *config.Config, logger *zap.Logger) (*redis.Client, error) {
	logger.Info("connecting to Redis",
		zap.String("host", cfg.Cache.Host),
		zap.Int("port", cfg.Cache.Port))

	client := redis.NewClient(&redis.Options{
		Addr:     fmt.Sprintf("%s:%d", cfg.Cache.Host, cfg.Cache.Port),
		Password: cfg.Cache.Password,
		DB:       cfg.Cache.DB,
	})

	// Test connection
	ctx := context.Background()
	if err := client.Ping(ctx).Err(); err != nil {
		return nil, fmt.Errorf("failed to connect to Redis: %w", err)
	}

	logger.Info("successfully connected to Redis")

	return client, nil
}
