package dto

import "time"

// SelectableModelsResponse is the workspace-scoped model picker response.
type SelectableModelsResponse struct {
	Object             string                              `json:"object"`
	WorkspaceID        string                              `json:"workspaceId"`
	Models             []SelectableModelOption             `json:"models"`
	HostedAvailability SelectableHostedAvailabilitySummary `json:"hostedAvailability"`
}

// SelectableHostedAvailabilitySummary describes whether hosted inventory facts
// were available while composing the response.
type SelectableHostedAvailabilitySummary struct {
	Status               string   `json:"status"`
	Reasons              []string `json:"reasons,omitempty"`
	CreditAtomsPerCredit int64    `json:"creditAtomsPerCredit,omitempty"`
}

// SelectableModelOption is one BYOK or AgentTeam-hosted model option.
type SelectableModelOption struct {
	Source                    string                         `json:"source"`
	ModelReference            string                         `json:"modelReference"`
	DisplayName               string                         `json:"displayName"`
	Enabled                   bool                           `json:"enabled"`
	Reasons                   []string                       `json:"reasons,omitempty"`
	Actions                   []string                       `json:"actions,omitempty"`
	Provider                  *SelectableModelProvider       `json:"provider,omitempty"`
	Hosted                    *SelectableHostedModelMetadata `json:"hosted,omitempty"`
	RequiresMachineCapability string                         `json:"requiresMachineCapability,omitempty"`
}

// SelectableModelProvider identifies the BYOK provider backing an option.
type SelectableModelProvider struct {
	ID         string `json:"id"`
	Name       string `json:"name"`
	DriverKind string `json:"driverKind"`
}

// SelectableHostedModelMetadata carries AgentTeam-hosted availability and pricing facts.
type SelectableHostedModelMetadata struct {
	HostedModelID                                 string                           `json:"hostedModelId"`
	InventoryStatus                               string                           `json:"inventoryStatus"`
	EntitlementStatus                             string                           `json:"entitlementStatus"`
	AccessSource                                  string                           `json:"accessSource,omitempty"`
	BalanceStatus                                 string                           `json:"balanceStatus"`
	RuntimeStatus                                 string                           `json:"runtimeStatus"`
	PricingVersionID                              string                           `json:"pricingVersionId,omitempty"`
	EffectivePricingVersionID                     string                           `json:"effectivePricingVersionId,omitempty"`
	PricingFormulaVersion                         string                           `json:"pricingFormulaVersion,omitempty"`
	BillableDimensions                            []string                         `json:"billableDimensions,omitempty"`
	ContextTiers                                  []HostedModelPricingTierResponse `json:"contextTiers,omitempty"`
	BasePricingVersionID                          string                           `json:"basePricingVersionId,omitempty"`
	BasePricingFormulaVersion                     string                           `json:"basePricingFormulaVersion,omitempty"`
	BaseBillableDimensions                        []string                         `json:"baseBillableDimensions,omitempty"`
	BaseContextTiers                              []HostedModelPricingTierResponse `json:"baseContextTiers,omitempty"`
	SupportedFamilies                             []string                         `json:"supportedFamilies,omitempty"`
	ExecutableWireAPIFamilies                     []string                         `json:"executableWireApiFamilies,omitempty"`
	MessagesFeatures                              []string                         `json:"messagesFeatures,omitempty"`
	ChatCompletionsFeatures                       []string                         `json:"chatCompletionsFeatures,omitempty"`
	ResponsesFeatures                             []string                         `json:"responsesFeatures,omitempty"`
	InputCreditAtomsPerMillionTokens              *int64                           `json:"inputCreditAtomsPerMillionTokens,omitempty"`
	CacheReadInputCreditAtomsPerMillionTokens     *int64                           `json:"cacheReadInputCreditAtomsPerMillionTokens,omitempty"`
	OutputCreditAtomsPerMillionTokens             *int64                           `json:"outputCreditAtomsPerMillionTokens,omitempty"`
	BaseInputCreditAtomsPerMillionTokens          *int64                           `json:"baseInputCreditAtomsPerMillionTokens,omitempty"`
	BaseCacheReadInputCreditAtomsPerMillionTokens *int64                           `json:"baseCacheReadInputCreditAtomsPerMillionTokens,omitempty"`
	BaseOutputCreditAtomsPerMillionTokens         *int64                           `json:"baseOutputCreditAtomsPerMillionTokens,omitempty"`
	PricingOverride                               *HostedPricingOverrideResponse   `json:"pricingOverride,omitempty"`
	UpdatedAt                                     time.Time                        `json:"updatedAt,omitempty"`
}
