package auth

const (
	// LoginIPRiskStatusPending 表示任务已落库但尚未被 worker claim。
	LoginIPRiskStatusPending = "pending"
	// LoginIPRiskStatusRunning 表示任务已被某个 worker 租约锁定。
	LoginIPRiskStatusRunning = "running"
	// LoginIPRiskStatusCompleted 表示任务已有 blocked/allowed/unknown 决策。
	LoginIPRiskStatusCompleted = "completed"
	// LoginIPRiskStatusFailed 表示本次处理失败，后续可按锁和 attempt 重试。
	LoginIPRiskStatusFailed = "failed"
	// LoginIPRiskStatusSkipped 表示已有新鲜决策，本任务不再访问 provider。
	LoginIPRiskStatusSkipped = "skipped"

	// LoginIPRiskDecisionBlocked 表示 IP 国家命中不支持国家。
	LoginIPRiskDecisionBlocked = "blocked"
	// LoginIPRiskDecisionAllowed 表示 IP 国家未命中不支持国家。
	LoginIPRiskDecisionAllowed = "allowed"
	// LoginIPRiskDecisionUnknown 表示 provider 全部不可用或没有可解析国家。
	LoginIPRiskDecisionUnknown = "unknown"
)

// LoginIPRiskJob 是登录成功后异步复核入口 IP 的持久任务。
type LoginIPRiskJob struct {
	AppCode         string
	JobID           string
	SessionID       string
	UserID          int64
	ClientIP        string
	ClientIPHash    string
	Channel         string
	Platform        string
	Language        string
	Timezone        string
	RequestID       string
	EdgeCountryCode string
	Status          string
	Decision        string
	CountryCode     string
	FailureReason   string
	LockedBy        string
	LockedUntilMs   int64
	AttemptCount    int
	CreatedAtMs     int64
	UpdatedAtMs     int64
}

// LoginIPRiskDecision 记录一次 IP Geo 决策，Redis 只保存它的快查投影。
type LoginIPRiskDecision struct {
	AppCode              string
	DecisionID           string
	ClientIP             string
	ClientIPHash         string
	Decision             string
	CountryCode          string
	Confidence           int
	ProviderAttemptsJSON string
	DecidedAtMs          int64
	ExpiresAtMs          int64
	CreatedAtMs          int64
}

// LoginRiskCountryBlock 是后台维护的国家屏蔽词事实。
// CountryCode 为空时仅作为客户端词表下发；服务端 IP 风控只能稳定消费 provider 返回的国家码。
type LoginRiskCountryBlock struct {
	AppCode     string
	BlockID     int64
	Keyword     string
	CountryCode string
	Enabled     bool
	CreatedAtMs int64
	UpdatedAtMs int64
}

// LoginRiskIPWhitelist 是后台维护的登录地区屏蔽 IP 白名单事实。
// IPAddress 使用 netip 标准化后的明文地址，便于运营审计和登录入口精确匹配。
type LoginRiskIPWhitelist struct {
	AppCode     string
	WhitelistID int64
	IPAddress   string
	Enabled     bool
	CreatedAtMs int64
	UpdatedAtMs int64
}

// LoginRiskUserWhitelist 是后台维护的登录地区屏蔽用户白名单事实。
// 用户 ID 命中后只跳过登录后的地区/IP 复核，不改变账号状态、注册设备限制或登录前 gateway 快拦语义。
type LoginRiskUserWhitelist struct {
	AppCode     string
	WhitelistID int64
	UserID      int64
	Enabled     bool
	CreatedAtMs int64
	UpdatedAtMs int64
}

// RegisterRiskConfig 是注册链路的风控开关集合。
// 当前只包含单设备最大账号数，后续增加注册频率或设备指纹策略时仍可复用同一行 App 配置。
type RegisterRiskConfig struct {
	AppCode              string
	MaxAccountsPerDevice int32
	UpdatedByAdminID     int64
	CreatedAtMs          int64
	UpdatedAtMs          int64
}
