package service

import (
	"strconv"
	"strings"

	"github.com/ocdp/cluster-service/internal/domain/entity"
)

func normalizeStandardQuotaQuantity(value string) string {
	value = strings.TrimSpace(value)
	switch strings.ToLower(value) {
	case "unlimited", "none", "no-limit", "nolimit":
		return ""
	}
	upper := strings.ToUpper(value)
	switch {
	case strings.HasSuffix(upper, "MB"):
		return strings.TrimSpace(value[:len(value)-2]) + "M"
	case strings.HasSuffix(upper, "GB"):
		return strings.TrimSpace(value[:len(value)-2]) + "G"
	default:
		return value
	}
}

func normalizeGPUMemoryQuota(value string) (string, error) {
	value = strings.TrimSpace(value)
	if value == "" {
		return "", nil
	}
	upper := strings.ToUpper(value)
	multiplier := int64(1)
	number := value
	switch {
	case strings.HasSuffix(upper, "MB"):
		number = strings.TrimSpace(value[:len(value)-2])
	case strings.HasSuffix(upper, "M"):
		number = strings.TrimSpace(value[:len(value)-1])
	case strings.HasSuffix(upper, "GB"):
		number = strings.TrimSpace(value[:len(value)-2])
		multiplier = 1000
	case strings.HasSuffix(upper, "G"):
		number = strings.TrimSpace(value[:len(value)-1])
		multiplier = 1000
	case strings.HasSuffix(upper, "GIB"):
		number = strings.TrimSpace(value[:len(value)-3])
		multiplier = 1024
	case strings.HasSuffix(upper, "GI"):
		number = strings.TrimSpace(value[:len(value)-2])
		multiplier = 1024
	}
	parsed, err := strconv.ParseInt(number, 10, 64)
	if err != nil || parsed < 0 {
		return "", entity.ErrInvalidTenantResourceQuota
	}
	return strconv.FormatInt(parsed*multiplier, 10), nil
}
