package dto

import "time"

type AdminPlatformServiceAccountCreateRequest struct {
	ID            string `json:"id,omitempty"`
	Name          string `json:"name"`
	Description   string `json:"description,omitempty"`
	AvatarAssetID string `json:"avatarAssetId,omitempty"`
	CorrelationID string `json:"correlationId,omitempty"`
}

type AdminPlatformServiceAccountAvatarUpdateRequest struct {
	ExpectedVersion int64  `json:"expectedVersion"`
	AvatarAssetID   string `json:"avatarAssetId"`
	CorrelationID   string `json:"correlationId,omitempty"`
}

type AdminPlatformBroadcastAssetRequest struct {
	SourceAssetRef string `json:"sourceAssetRef"`
	ContentHash    string `json:"contentHash"`
	MediaType      string `json:"mediaType,omitempty"`
	SizeBytes      int64  `json:"sizeBytes"`
	ClientLabel    string `json:"clientLabel,omitempty"`
}

type AdminPlatformBroadcastCreateRequest struct {
	ClientBroadcastID string                               `json:"clientBroadcastId"`
	CorrelationID     string                               `json:"correlationId,omitempty"`
	Title             string                               `json:"title"`
	Content           string                               `json:"content"`
	Assets            []AdminPlatformBroadcastAssetRequest `json:"assets,omitempty"`
}

type AdminPlatformServiceAccountResponse struct {
	ID                            string    `json:"id"`
	Name                          string    `json:"name"`
	Description                   string    `json:"description"`
	AvatarAssetID                 string    `json:"avatarAssetId,omitempty"`
	AvatarURL                     string    `json:"avatarUrl,omitempty"`
	ProfileVersion                int64     `json:"profileVersion"`
	Version                       int64     `json:"version"`
	ProvisioningMode              string    `json:"provisioningMode"`
	ProvisioningState             string    `json:"provisioningState"`
	AppliedProvisioningGeneration int64     `json:"appliedProvisioningGeneration"`
	AudiencePolicyVersion         int64     `json:"audiencePolicyVersion"`
	LatestBroadcastSeq            int64     `json:"latestBroadcastSeq"`
	CreatedByOperatorUserID       string    `json:"createdByOperatorUserId"`
	CreatedAt                     time.Time `json:"createdAt"`
	UpdatedAt                     time.Time `json:"updatedAt"`
}

type AdminPlatformBroadcastResponse struct {
	ID                             string     `json:"id"`
	PlatformServiceAccountID       string     `json:"platformServiceAccountId"`
	OperatorPrincipalID            string     `json:"operatorPrincipalId"`
	OperatorDisplayName            string     `json:"operatorDisplayName"`
	OperatorAvatarURL              string     `json:"operatorAvatarUrl,omitempty"`
	Title                          string     `json:"title"`
	WorkspaceServiceAccountID      string     `json:"workspaceServiceAccountId,omitempty"`
	WorkspaceMessageID             string     `json:"workspaceMessageId,omitempty"`
	ClientBroadcastID              string     `json:"clientBroadcastId"`
	AcceptanceOrdinal              int64      `json:"acceptanceOrdinal"`
	RequiredProvisioningGeneration int64      `json:"requiredProvisioningGeneration"`
	BroadcastSeq                   *int64     `json:"broadcastSeq,omitempty"`
	PayloadDigest                  string     `json:"payloadDigest"`
	State                          string     `json:"state"`
	EnumerationComplete            bool       `json:"enumerationComplete"`
	TargetCount                    int64      `json:"targetCount"`
	DeliveredCount                 int64      `json:"deliveredCount"`
	SkippedCount                   int64      `json:"skippedCount"`
	ExceptionCount                 int64      `json:"exceptionCount"`
	Version                        int64      `json:"version"`
	CorrelationID                  string     `json:"correlationId,omitempty"`
	CreatedAt                      time.Time  `json:"createdAt"`
	UpdatedAt                      time.Time  `json:"updatedAt"`
	AllocatedAt                    *time.Time `json:"allocatedAt,omitempty"`
	CompletedAt                    *time.Time `json:"completedAt,omitempty"`
	ClosedAt                       *time.Time `json:"closedAt,omitempty"`
	StatusURL                      string     `json:"statusUrl"`
}

type AdminPlatformReconcileResponse struct {
	DiscoveredInputs       int `json:"discoveredInputs"`
	ProvisionedInstances   int `json:"provisionedInstances"`
	AdvancedAccounts       int `json:"advancedAccounts"`
	AllocatedBroadcasts    int `json:"allocatedBroadcasts"`
	EnumeratedDeliveries   int `json:"enumeratedDeliveries"`
	SettledExcludedTargets int `json:"settledExcludedTargets"`
	DeliveredMessages      int `json:"deliveredMessages"`
	RetriedDeliveries      int `json:"retriedDeliveries"`
	CompletedBroadcasts    int `json:"completedBroadcasts"`
}
