package db

import (
	"github.com/spf13/viper"

	"github.com/elyby/chrly/interfaces"
)

type StorageFactory struct {
	Config *viper.Viper
}

type RepositoriesCreator interface {
	CreateSkinsRepository() (interfaces.SkinsRepository, error)
	CreateCapesRepository() (interfaces.CapesRepository, error)
}

func (factory *StorageFactory) CreateFactory(backend string) RepositoriesCreator {
	switch backend {
	case "redis":
		return &RedisFactory{
			Host:     factory.Config.GetString("storage.redis.host"),
			Port:     factory.Config.GetInt("storage.redis.port"),
			PoolSize: factory.Config.GetInt("storage.redis.poolSize"),
		}
	case "filesystem":
		return &FilesystemFactory{
			BasePath    : factory.Config.GetString("storage.filesystem.basePath"),
			CapesDirName: factory.Config.GetString("storage.filesystem.capesDirName"),
		}
	}

	return nil
}