package constants

import "time"

const (
	// ApprovalBusinessTypeRefund 表示退款审批业务场景。
	ApprovalBusinessTypeRefund = "refund_approval"
	// ApprovalBusinessTypeOfflineRecharge 表示员工线下代充值审批业务场景。
	ApprovalBusinessTypeOfflineRecharge = "offline_recharge_approval"
)

const (
	// ApprovalFieldRechargeNo 表示线下代充值单号业务字段。
	ApprovalFieldRechargeNo = "recharge_no"
	// ApprovalFieldShopID 表示线下代充值目标店铺 ID 业务字段。
	ApprovalFieldShopID = "shop_id"
	// ApprovalFieldShopName 表示线下代充值目标店铺名称业务字段。
	ApprovalFieldShopName = "shop_name"
	// ApprovalFieldAmount 表示线下代充值元金额展示业务字段。
	ApprovalFieldAmount = "amount"
	// ApprovalFieldAmountCent 表示线下代充值分金额业务字段。
	ApprovalFieldAmountCent = "amount_cent"
	// ApprovalFieldPaymentVoucherKey 表示线下代充值凭证对象存储 Key 列表业务字段。
	ApprovalFieldPaymentVoucherKey = "payment_voucher_key"
	// ApprovalFieldRemark 表示线下代充值运营备注业务字段。
	ApprovalFieldRemark = "remark"
	// ApprovalFieldSubmitterID 表示真实业务提交人账号 ID 业务字段。
	ApprovalFieldSubmitterID = "submitter_id"
	// ApprovalFieldSubmitterName 表示真实业务提交人账号名称业务字段。
	ApprovalFieldSubmitterName = "submitter_name"
	// ApprovalFieldRefundNo 表示退款单号业务字段。
	ApprovalFieldRefundNo = "refund_no"
	// ApprovalFieldOrderID 表示退款关联订单 ID 业务字段。
	ApprovalFieldOrderID = "order_id"
	// ApprovalFieldOrderNo 表示退款关联订单号业务字段。
	ApprovalFieldOrderNo = "order_no"
	// ApprovalFieldAssetIdentifier 表示退款资产标识业务字段。
	ApprovalFieldAssetIdentifier = "asset_identifier"
	// ApprovalFieldAssetType 表示退款资产类型业务字段。
	ApprovalFieldAssetType = "asset_type"
	// ApprovalFieldActualReceivedAmount 表示退款实收金额业务字段。
	ApprovalFieldActualReceivedAmount = "actual_received_amount"
	// ApprovalFieldRequestedRefundAmount 表示申请退款金额业务字段。
	ApprovalFieldRequestedRefundAmount = "requested_refund_amount"
	// ApprovalFieldRefundVoucherKey 表示退款凭证对象存储 Key 列表业务字段。
	ApprovalFieldRefundVoucherKey = "refund_voucher_key"
	// ApprovalFieldRefundReason 表示退款原因业务字段。
	ApprovalFieldRefundReason = "refund_reason"
	// ApprovalFieldPackageUsageID 表示退款指定套餐使用记录 ID 业务字段。
	ApprovalFieldPackageUsageID = "package_usage_id"
)

const (
	// ApprovalStatusSubmitting 表示审批申请等待渠道提交。
	ApprovalStatusSubmitting = 0
	// ApprovalStatusPending 表示审批申请已进入渠道审批。
	ApprovalStatusPending = 1
	// ApprovalStatusApproved 表示审批已通过。
	ApprovalStatusApproved = 2
	// ApprovalStatusRejected 表示审批已拒绝。
	ApprovalStatusRejected = 3
	// ApprovalStatusCancelled 表示审批已撤销。
	ApprovalStatusCancelled = 4
	// ApprovalStatusRevokedAfterApproved 表示审批通过后被撤销。
	ApprovalStatusRevokedAfterApproved = 5
	// ApprovalStatusDeleted 表示审批已删除。
	ApprovalStatusDeleted = 6
	// ApprovalStatusSubmissionFailed 表示渠道明确确认审批提交失败。
	ApprovalStatusSubmissionFailed = 7
	// ApprovalStatusSubmissionUnknown 表示审批提交请求已发出但结果未知。
	ApprovalStatusSubmissionUnknown = 8
)

const (
	// ApprovalDecisionApproved 表示标准审批通过决策。
	ApprovalDecisionApproved = "approved"
	// ApprovalDecisionRejected 表示标准审批拒绝决策。
	ApprovalDecisionRejected = "rejected"
	// ApprovalDecisionCancelled 表示标准审批撤销决策。
	ApprovalDecisionCancelled = "cancelled"
	// ApprovalDecisionDeleted 表示标准审批删除决策。
	ApprovalDecisionDeleted = "deleted"
	// ApprovalDecisionRevokedAfterApproved 表示标准审批通过后撤销决策。
	ApprovalDecisionRevokedAfterApproved = "revoked_after_approved"
)

const (
	// ApprovalInitialVersion 表示通用审批实例的初始乐观锁版本。
	ApprovalInitialVersion = 1
	// ApprovalQueryMaxBatchSize 表示通用审批摘要单次批量投影上限。
	ApprovalQueryMaxBatchSize = 100
	// ApprovalUnknownSubmitterName 表示提交人名称快照无法解析。
	ApprovalUnknownSubmitterName = "未知账号"
	// ApprovalDecisionDeliveryLeaseDuration 表示标准决策消费者的单次处理租约时长。
	ApprovalDecisionDeliveryLeaseDuration = 5 * time.Minute
	// ApprovalPreparationTTL 表示事务前审批可用性结果允许复用的最长期限。
	ApprovalPreparationTTL = 30 * time.Second
)

const (
	// ApprovalDecisionDeliveryPending 表示标准决策等待业务消费。
	ApprovalDecisionDeliveryPending = 0
	// ApprovalDecisionDeliveryProcessing 表示标准决策已被消费者租约领取。
	ApprovalDecisionDeliveryProcessing = 1
	// ApprovalDecisionDeliverySucceeded 表示标准决策已被业务幂等处理。
	ApprovalDecisionDeliverySucceeded = 2
	// ApprovalDecisionDeliveryFailed 表示标准决策消费失败并等待重试。
	ApprovalDecisionDeliveryFailed = 3
)

const (
	// OutboxEventTypeApprovalTerminalDecision 表示通用审批标准终态已记录。
	OutboxEventTypeApprovalTerminalDecision = "approval.terminal_decision.recorded"
	// OutboxEventTypeApprovalSubmissionRequested 表示通用审批实例等待渠道提交。
	OutboxEventTypeApprovalSubmissionRequested = "approval.submission.requested"
	// ApprovalTerminalDecisionPayloadVersionV1 表示标准终态事件载荷第一版。
	ApprovalTerminalDecisionPayloadVersionV1 = 1
	// ApprovalSubmissionPayloadVersionV1 表示审批申请提交事件载荷第一版。
	ApprovalSubmissionPayloadVersionV1 = 1
)

const (
	// ApprovalSyncSourceCallback 表示由第三方审批回调触发权威同步。
	ApprovalSyncSourceCallback = "callback"
	// ApprovalSyncSourcePolling 表示由定时兜底轮询触发权威同步。
	ApprovalSyncSourcePolling = "polling"
	// ApprovalSyncSourceManual 表示由受控人工动作触发权威同步。
	ApprovalSyncSourceManual = "manual"
)

// GetApprovalStatusName 返回通用审批状态的中文名称。
func GetApprovalStatusName(status int) string {
	switch status {
	case ApprovalStatusSubmitting:
		return "提交中"
	case ApprovalStatusPending:
		return "审批中"
	case ApprovalStatusApproved:
		return "已通过"
	case ApprovalStatusRejected:
		return "已拒绝"
	case ApprovalStatusCancelled:
		return "已撤销"
	case ApprovalStatusRevokedAfterApproved:
		return "通过后撤销"
	case ApprovalStatusDeleted:
		return "已删除"
	case ApprovalStatusSubmissionFailed:
		return "提交失败"
	case ApprovalStatusSubmissionUnknown:
		return "提交结果未知"
	default:
		return "未知"
	}
}
