package pathutil

import (
	"context"
	"fmt"
	"path/filepath"

	"github.com/milvus-io/milvus/pkg/v3/mlog"
	"github.com/milvus-io/milvus/pkg/v3/util/paramtable"
)

type PathType int

const (
	GrowingMMapPath PathType = iota
	LocalChunkPath
	BM25Path
	RootCachePath
	FileResourcePath
	ExprCachePath
)

const (
	CachePathPrefix        = "cache"
	GrowingMMapPathPrefix  = "growing_mmap"
	LocalChunkPathPrefix   = "local_chunk"
	BM25PathPrefix         = "bm25"
	FileResourcePathPrefix = "file_resource"
	ExprCachePathPrefix    = "expr_cache"
)

func GetPath(pathType PathType, nodeID int64) string {
	rootPath := paramtable.Get().LocalStorageCfg.Path.GetValue()

	path := filepath.Join(rootPath, CachePathPrefix)
	switch pathType {
	case GrowingMMapPath:
		path = filepath.Join(path, fmt.Sprintf("%d", nodeID), GrowingMMapPathPrefix)
	case LocalChunkPath:
		path = filepath.Join(path, fmt.Sprintf("%d", nodeID), LocalChunkPathPrefix)
	case BM25Path:
		path = filepath.Join(path, fmt.Sprintf("%d", nodeID), BM25PathPrefix)
	case FileResourcePath:
		path = filepath.Join(path, fmt.Sprintf("%d", nodeID), FileResourcePathPrefix)
	case ExprCachePath:
		path = filepath.Join(path, fmt.Sprintf("%d", nodeID), ExprCachePathPrefix)
	case RootCachePath:
	}
	mlog.Info(context.TODO(), "Get path for", mlog.Any("pathType", pathType), mlog.FieldNodeID(nodeID), mlog.String("path", path))
	return path
}
