package common

import (
	"github.com/pingcap/log"
	"go.uber.org/zap"

	"github.com/pingcap-inc/clinic/pkg/auth/session"
	"github.com/pingcap-inc/clinic/pkg/datasource"
	"github.com/pingcap-inc/clinic/pkg/db"
)

const (
	DefaultBlockSizeInBytes = 6 * 1024 * 1024
	MaxUploadConcurrent     = 100
	MaxBlockSizeInBytes     = 5 * 1000 * 1000 * 1000
	MaxFileSizeInBytes      = 5 * 1000 * 1000 * 1000 * 1000
)

func GetBlockSizeInBytes(fileSize int64) int64 {
	if int(fileSize/DefaultBlockSizeInBytes) < MaxUploadConcurrent {
		return DefaultBlockSizeInBytes
	}

	size := fileSize / MaxUploadConcurrent
	if size < MaxBlockSizeInBytes {
		return size
	}

	return MaxBlockSizeInBytes
}

func NeedToRebuild(file *db.UploadFile) (bool, error) {
	if file.FileLen > DisableRebuildSize {
		log.Info("the file is too large, disable rebuild", zap.String("file", file.FileUUID))
		return false, nil
	}

	if file.Rebuild != string(db.RebuildNow) {
		return false, nil
	}

	//if file.Rebuild == string(db.RebuildNow) {
	//	return true, nil
	//}

	org, err := datasource.GetOrganization(&session.CtxUser{Internal: false}, file.OrgID)
	if err != nil {
		return false, err
	}

	return !org.DisableRebuild, nil
}

const (
	DisableRebuildSize = 10 * 1024 * 1024 * 1024
)
