package dto

type UpstreamDTO struct {
	ID       int    `json:"id,omitempty"`
	Name     string `json:"name" binding:"required"`
	BaseURL  string `json:"base_url" binding:"required"`
	Endpoint string `json:"endpoint"`
}

type UpstreamRequest struct {
	ChannelIDs []int64       `json:"channel_ids"`
	Upstreams  []UpstreamDTO `json:"upstreams"`
	Timeout    int           `json:"timeout"`
	SyncMode   string        `json:"sync_mode"`
	// IncludeAligned 为 true 时，即使本地已生效价与上游一致，仍在 differences 中返回该行。
	// 指针：省略或未传时按 true 处理（与控制台「展示对照」一致）；显式 false 可关闭以减小 payload。
	IncludeAligned *bool `json:"include_aligned,omitempty"`
}

// TestResult 上游测试连通性结果
type TestResult struct {
	Name   string `json:"name"`
	Status string `json:"status"`
	Error  string `json:"error,omitempty"`
}

// DifferenceItem 差异项
// Current 为系统全局默认（全局 ModelRatio / ModelPrice 等）
// UpstreamOld 为各渠道列「当前生效」旧值：有渠道覆盖则用渠道价，否则同 Current 语义（全局）
// Upstreams 为各渠道列上游拉取的新定价（数值），与 UpstreamOld 对照展示 旧/新

type DifferenceItem struct {
	Current     interface{}            `json:"current"`
	UpstreamOld map[string]interface{} `json:"upstream_old,omitempty"`
	Upstreams   map[string]interface{} `json:"upstreams"`
	Confidence  map[string]bool        `json:"confidence"`
}

type SyncableChannel struct {
	ID      int    `json:"id"`
	Name    string `json:"name"`
	BaseURL string `json:"base_url"`
	Status  int    `json:"status"`
	Type    int    `json:"type"`
}
