package constants

import "time"

const (
	// IntegrationDirectionInbound 表示外部系统调用本系统。
	IntegrationDirectionInbound = "inbound"
	// IntegrationDirectionOutbound 表示本系统调用外部系统。
	IntegrationDirectionOutbound = "outbound"
)

const (
	// IntegrationProviderCTCC 表示中国电信回调提供方。
	IntegrationProviderCTCC = "ctcc"
	// IntegrationOperationCTCCRealnameCallback 表示中国电信实名结果回调。
	IntegrationOperationCTCCRealnameCallback = "realname_callback"
	// IntegrationProviderCMCC 表示中国移动回调提供方。
	IntegrationProviderCMCC = "cmcc"
	// IntegrationOperationCMCCRealnameCallback 表示中国移动实名结果回调。
	IntegrationOperationCMCCRealnameCallback = "realname_callback"
	// IntegrationProviderCUCC 表示中国联通回调提供方。
	IntegrationProviderCUCC = "cucc"
	// IntegrationOperationCUCCRealnameRemovalCallback 表示中国联通解除实名回调。
	IntegrationOperationCUCCRealnameRemovalCallback = "realname_removal_callback"
	// IntegrationOperationCUCCRealnameCallback 表示中国联通实名成功回调。
	IntegrationOperationCUCCRealnameCallback = "realname_callback"
	// IntegrationInboundProcessingLease 表示入站回调 pending 记录允许恢复前的处理租约。
	IntegrationInboundProcessingLease = time.Minute
)

const (
	// IntegrationResultPending 表示外部尝试已建立但尚未终结。
	IntegrationResultPending = "pending"
	// IntegrationResultSuccess 表示外部尝试成功。
	IntegrationResultSuccess = "success"
	// IntegrationResultFailed 表示外部尝试明确失败。
	IntegrationResultFailed = "failed"
	// IntegrationResultUnknown 表示请求已发出但结果未知，需要按记录的策略恢复。
	IntegrationResultUnknown = "unknown"
	// IntegrationResultNotFound 表示外部资源不存在。
	IntegrationResultNotFound = "not_found"
	// IntegrationResultInvalidPayload 表示入站载荷无效。
	IntegrationResultInvalidPayload = "invalid_payload"
	// IntegrationResultConflict 表示入站事实存在唯一性或幂等冲突。
	IntegrationResultConflict = "conflict"
	// IntegrationResultIgnored 表示外部尝试被安全忽略。
	IntegrationResultIgnored = "ignored"
	// IntegrationResultMerged 表示尝试被合并且未发送请求。
	IntegrationResultMerged = "merged"
	// IntegrationResultRateLimited 表示尝试因限频未发送请求。
	IntegrationResultRateLimited = "rate_limited"
	// IntegrationResultCompleted 表示业务已达预期，尝试提前完成且未发送请求。
	IntegrationResultCompleted = "completed"
	// IntegrationResultCancelled 表示尝试已取消。
	IntegrationResultCancelled = "cancelled"
)

// IntegrationResultName 返回外部尝试结果的中文名称。
func IntegrationResultName(result string) string {
	names := map[string]string{
		IntegrationResultPending:        "待处理",
		IntegrationResultSuccess:        "成功",
		IntegrationResultFailed:         "失败",
		IntegrationResultUnknown:        "结果未知",
		IntegrationResultNotFound:       "未找到",
		IntegrationResultInvalidPayload: "无效载荷",
		IntegrationResultConflict:       "冲突",
		IntegrationResultIgnored:        "已忽略",
		IntegrationResultMerged:         "已合并",
		IntegrationResultRateLimited:    "已限频",
		IntegrationResultCompleted:      "已提前完成",
		IntegrationResultCancelled:      "已取消",
	}
	return names[result]
}
