package workspace

import (
	"context"
	"time"

	"github.com/tidbcloud/AgentTeam/internal/maas/availability"
)

type HostedAvailabilityClient interface {
	LoadHostedAvailability(ctx context.Context, organizationID string) (HostedAvailability, error)
}

// HostedPricingClient loads MaaS-hosted pricing facts needed by workspace pickers.
type HostedPricingClient interface {
	LoadHostedPricing(ctx context.Context, organizationID string) (HostedPricing, error)
}

// HostedPricing is the model-picker subset of MaaS hosted pricing.
type HostedPricing struct {
	CreditAtomsPerCredit int64
	HostedModels         []HostedModelPricing
}

// HostedModelPricing is one model-picker hosted price row.
type HostedModelPricing struct {
	ModelReference                                string
	HostedModelID                                 string
	PricingVersionID                              string
	EffectivePricingVersionID                     string
	PricingFormulaVersion                         string
	BillableDimensions                            []string
	ContextTiers                                  []HostedPricingTier
	BasePricingVersionID                          string
	BasePricingFormulaVersion                     string
	BaseBillableDimensions                        []string
	BaseContextTiers                              []HostedPricingTier
	InputCreditAtomsPerMillionTokens              *int64
	CacheReadInputCreditAtomsPerMillionTokens     *int64
	OutputCreditAtomsPerMillionTokens             *int64
	BaseInputCreditAtomsPerMillionTokens          *int64
	BaseCacheReadInputCreditAtomsPerMillionTokens *int64
	BaseOutputCreditAtomsPerMillionTokens         *int64
	PricingOverride                               *HostedPricingOverride
}

// HostedPricingTier is one MaaS context-length pricing tier.
type HostedPricingTier struct {
	ID               string
	MinContextTokens int64
	MaxContextTokens *int64
	Rates            HostedPricingTierRates
}

// HostedPricingTierRates carries hosted credit rates for a context tier.
type HostedPricingTierRates struct {
	InputTokensCreditAtomsPerMillionTokens    int64
	CacheReadInputCreditAtomsPerMillionTokens int64
	OutputCreditAtomsPerMillionTokens         int64
}

// HostedPricingOverride is the active MaaS pricing override metadata.
type HostedPricingOverride struct {
	ID                        string
	HostedModelID             string
	ScopeType                 string
	ScopeID                   string
	BasePricingVersionID      string
	EffectivePricingVersionID string
	OverrideType              string
	DisplayLabel              string
	Priority                  int
	EffectiveFrom             *time.Time
	EffectiveTo               *time.Time
	Status                    string
}

type HostedAvailability = availability.Availability
type HostedAvailabilityModel = availability.Model
type HostedAvailabilityPricingTier = availability.PricingTier
