package pimport

import (
	"fmt"

	"github.com/tidbcloud/dataflow-service/internal/config"
)

const (
	LocalImportBucket = "import-local"
	userIdHash        = 11111
)

type LocalImportBucketNaming struct {
	region   string
	fileName string
	userId   uint64
}

func NewLocalImportBucketNaming(region, fileName string, userId uint64) *LocalImportBucketNaming {
	return &LocalImportBucketNaming{
		region:   region,
		fileName: fileName,
		userId:   userId,
	}
}

func (l *LocalImportBucketNaming) GenBucketUrl() string {
	return fmt.Sprintf("s3://%s/%d", l.GenBucketName(), hash(l.userId))
}

func (l *LocalImportBucketNaming) GenCompletedUrl() string {
	return fmt.Sprintf("s3://%s/%d/%s", l.GenBucketName(), hash(l.userId), l.fileName)
}

func (l *LocalImportBucketNaming) GenBucketName() string {
	env := config.Global().Env
	if env == "nightly" || env == "" {
		env = "dev"
	}
	return fmt.Sprintf("%s-%s-%s", LocalImportBucket, env, l.region)
}

func (l *LocalImportBucketNaming) GenObjectKey() string {
	return fmt.Sprintf("%d/%s", hash(l.userId), l.fileName)
}

func (l *LocalImportBucketNaming) GenPath() string {
	return l.fileName
}

func hash(id uint64) uint64 {
	return id + userIdHash
}
