package service

import "context"

// SoraAccountRepository Sora 账号扩展表仓储接口
// 用于管理 sora_accounts 表，与 accounts 主表形成双表结构。
//
// 设计说明：
//   - sora_accounts 表存储 Sora 账号的 OAuth 凭证副本
//   - Sora gateway 优先读取此表的字段以获得更好的查询性能
//   - 主表 accounts 通过 credentials JSON 字段也存储相同信息
//   - Token 刷新时需要同时更新两个表以保持数据一致性
type SoraAccountRepository interface {
	// Upsert 创建或更新 Sora 账号扩展信息
	// accountID: 关联的 accounts.id
	// updates: 要更新的字段，支持 access_token、refresh_token、session_token
	//
	// 如果记录不存在则创建，存在则更新。
	// 用于：
	//   1. 创建 Sora 账号时初始化扩展表
	//   2. Token 刷新时同步更新扩展表
	Upsert(ctx context.Context, accountID int64, updates map[string]any) error

	// GetByAccountID 根据账号 ID 获取 Sora 扩展信息
	// 返回 nil, nil 表示记录不存在（非错误）
	GetByAccountID(ctx context.Context, accountID int64) (*SoraAccount, error)

	// Delete 删除 Sora 账号扩展信息
	// 通常由外键 ON DELETE CASCADE 自动处理，此方法用于手动清理
	Delete(ctx context.Context, accountID int64) error
}

// SoraAccount Sora 账号扩展信息
// 对应 sora_accounts 表，存储 Sora 账号的 OAuth 凭证副本
type SoraAccount struct {
	AccountID    int64  // 关联的 accounts.id
	AccessToken  string // OAuth access_token
	RefreshToken string // OAuth refresh_token
	SessionToken string // Session token（可选，用于 ST→AT 兜底）
}
