package util

import (
	"errors"

	"github.com/pingcap/schrodinger/pkg/storage"
)

// GetStorageFromConfig will get storage config from configPtr
func GetStorageFromConfig(configPtr *interface{}) (*storage.Storage, error) {
	if configPtr == nil {
		return nil, errors.New("config of storage is nil")
	}
	rawConfig, ok := (*configPtr).(map[string]interface{})
	if !ok {
		return nil, errors.New("Config format error: config of storage is not a map")
	}
	config := SimpleMap(rawConfig)

	driver := config.GetString("driver")
	if driver == nil {
		return nil, errors.New("driver is not defined in config of storage")
	}

	datasource := config.GetString("datasource")
	if datasource == nil {
		return nil, errors.New("datasource is not defined in config of storage")
	}

	maxIdleConnection := config.GetInt64("max-idle-conns")
	if maxIdleConnection == nil {
		return nil, errors.New("max-idle-conns is not defined in config of storage")
	}

	return storage.NewStorage(storage.Config{
		Driver:       *driver,
		Datasource:   *datasource,
		MaxIdleConns: int(*maxIdleConnection),
	})
}
