package entity

// AuthorizationReq 定義授權請求的結構
type AuthorizationReq struct {
	GrantType      string            `json:"grant_type"`       // 授權類型
	DeviceID       string            `json:"device_id"`        // 設備 ID
	Scope          string            `json:"scope"`            // 授權範圍
	Data           map[string]string `json:"data"`             // 附加數據
	Expires        int64             `json:"expires"`          // 過期時間（秒）
	IsRefreshToken bool              `json:"is_refresh_token"` // 是否為刷新令牌
	Role           string            `json:"role"`             // 用戶角色
	Account        string            `json:"account"`          // 登入時的帳號
}

// TokenResp 定義訪問令牌響應的結構
type TokenResp struct {
	AccessToken  string `json:"access_token"`  // 訪問令牌
	TokenType    string `json:"token_type"`    // 令牌類型
	ExpiresIn    int64  `json:"expires_in"`    // 過期時間（秒）
	RefreshToken string `json:"refresh_token"` // 刷新令牌
}

// CreateOneTimeTokenReq 建立一次性 Token 的請求
type CreateOneTimeTokenReq struct {
	Token string `json:"token"` // 長期有效的驗證令牌
}

// CreateOneTimeTokenResp 建立一次性 Token 的響應
type CreateOneTimeTokenResp struct {
	OneTimeToken string `json:"one_time_token"` // 一次性令牌
}

// RefreshTokenReq 更新 Token 的請求
type RefreshTokenReq struct {
	Token    string `json:"token"`     // 令牌
	Scope    string `json:"scope"`     // 授權範圍
	Expires  int64  `json:"expires"`   // 過期時間（秒）
	DeviceID string `json:"device_id"` // 設備 ID
}

// RefreshTokenResp 更新令牌的響應
type RefreshTokenResp struct {
	Token        string `json:"token"`          // 新的訪問令牌
	OneTimeToken string `json:"one_time_token"` // 一次性令牌
	ExpiresIn    int64  `json:"expires_in"`     // 過期時間（秒）
	TokenType    string `json:"token_type"`     // 令牌類型
}

// CancelTokenReq 註銷 Token 的請求
type CancelTokenReq struct {
	Token string `json:"token"` // 需要註銷的令牌
}

// DoTokenByUIDReq 基於 UID 操作 Token 的請求
type DoTokenByUIDReq struct {
	IDs []string `json:"ids"` // Token ID 列表
	UID string   `json:"uid"` // 用戶 ID
}

// QueryTokenByUIDReq 查詢 UID 對應的 Token
type QueryTokenByUIDReq struct {
	UID string `json:"uid"` // 用戶 ID
}

// ValidationTokenReq 驗證 Token 的請求
type ValidationTokenReq struct {
	Token string `json:"token"` // 需要驗證的令牌
}

// ValidationTokenResp 驗證並返回 Token 詳情
type ValidationTokenResp struct {
	Token Token             `json:"token"` // Token 詳情
	Data  map[string]string `json:"data"`  // 附加數據
}

// DoTokenByDeviceIDReq 基於設備 ID 操作 Token 的請求
type DoTokenByDeviceIDReq struct {
	DeviceID string `json:"device_id"` // 設備 ID
}

// CancelOneTimeTokenReq 取消一次性 Token 的請求
type CancelOneTimeTokenReq struct {
	Token []string `json:"token"` // 一次性 Token 列表
}
