package costexplorer

import "github.com/shopspring/decimal"

const exportUsageDefaultPeriodMinutes = 24 * 60

type exportUsageContext struct {
	usagePeriodMinutes decimal.Decimal
}

type exportUsageStrategy struct {
	unit    string
	convert func(decimal.Decimal, exportUsageContext) (decimal.Decimal, bool)
}

var exportUsageStrategies = map[string]exportUsageStrategy{
	"RU": {
		unit: "RU",
		convert: func(baseUsage decimal.Decimal, _ exportUsageContext) (decimal.Decimal, bool) {
			return baseUsage, true
		},
	},
	"GiB-month": {
		unit: "GiB-month",
		convert: func(baseUsage decimal.Decimal, ctx exportUsageContext) (decimal.Decimal, bool) {
			if !ctx.usagePeriodMinutes.IsPositive() {
				return decimal.Zero, false
			}
			return baseUsage.Div(decimal.NewFromInt(1024)).Div(ctx.usagePeriodMinutes), true
		},
	},
	"RCU": {
		unit: "RCU",
		convert: func(baseUsage decimal.Decimal, ctx exportUsageContext) (decimal.Decimal, bool) {
			if !ctx.usagePeriodMinutes.IsPositive() {
				return decimal.Zero, false
			}
			return baseUsage.Div(ctx.usagePeriodMinutes), true
		},
	},
}

func newDailyExportUsageContext() exportUsageContext {
	return exportUsageContext{
		usagePeriodMinutes: decimal.NewFromInt(exportUsageDefaultPeriodMinutes),
	}
}
