package i18n

// Message keys for i18n translations
// Use these constants instead of hardcoded strings

// Common error messages
const (
	MsgInvalidParams     = "common.invalid_params"
	MsgDatabaseError     = "common.database_error"
	MsgRetryLater        = "common.retry_later"
	MsgGenerateFailed    = "common.generate_failed"
	MsgNotFound          = "common.not_found"
	MsgUnauthorized      = "common.unauthorized"
	MsgForbidden         = "common.forbidden"
	MsgInvalidId         = "common.invalid_id"
	MsgIdEmpty           = "common.id_empty"
	MsgFeatureDisabled   = "common.feature_disabled"
	MsgOperationSuccess  = "common.operation_success"
	MsgOperationFailed   = "common.operation_failed"
	MsgUpdateSuccess     = "common.update_success"
	MsgUpdateFailed      = "common.update_failed"
	MsgCreateSuccess     = "common.create_success"
	MsgCreateFailed      = "common.create_failed"
	MsgDeleteSuccess     = "common.delete_success"
	MsgDeleteFailed      = "common.delete_failed"
	MsgAlreadyExists     = "common.already_exists"
	MsgNameCannotBeEmpty = "common.name_cannot_be_empty"
)

// Token related messages
const (
	MsgTokenNameTooLong          = "token.name_too_long"
	MsgTokenQuotaNegative        = "token.quota_negative"
	MsgTokenQuotaExceedMax       = "token.quota_exceed_max"
	MsgTokenGenerateFailed       = "token.generate_failed"
	MsgTokenGetInfoFailed        = "token.get_info_failed"
	MsgTokenExpiredCannotEnable  = "token.expired_cannot_enable"
	MsgTokenExhaustedCannotEable = "token.exhausted_cannot_enable"
	MsgTokenInvalid              = "token.invalid"
	MsgTokenNotProvided          = "token.not_provided"
	MsgTokenExpired              = "token.expired"
	MsgTokenExhausted            = "token.exhausted"
	MsgTokenStatusUnavailable    = "token.status_unavailable"
	MsgTokenDbError              = "token.db_error"
)

// Redemption related messages
const (
	MsgRedemptionNameLength        = "redemption.name_length"
	MsgRedemptionCountPositive     = "redemption.count_positive"
	MsgRedemptionCountMax          = "redemption.count_max"
	MsgRedemptionCreateFailed      = "redemption.create_failed"
	MsgRedemptionInvalid           = "redemption.invalid"
	MsgRedemptionUsed              = "redemption.used"
	MsgRedemptionExpired           = "redemption.expired"
	MsgRedemptionFailed            = "redemption.failed"
	MsgRedemptionNotProvided       = "redemption.not_provided"
	MsgRedemptionExpireTimeInvalid = "redemption.expire_time_invalid"
)

// User related messages
const (
	MsgUserPasswordLoginDisabled      = "user.password_login_disabled"
	MsgUserRegisterDisabled           = "user.register_disabled"
	MsgUserPasswordRegisterDisabled   = "user.password_register_disabled"
	MsgUserUsernameOrPasswordEmpty    = "user.username_or_password_empty"
	MsgUserUsernameOrPasswordError    = "user.username_or_password_error"
	MsgUserEmailOrPasswordEmpty       = "user.email_or_password_empty"
	MsgUserExists                     = "user.exists"
	MsgUserNotExists                  = "user.not_exists"
	MsgUserDisabled                   = "user.disabled"
	MsgUserSessionSaveFailed          = "user.session_save_failed"
	MsgUserRequire2FA                 = "user.require_2fa"
	MsgUserEmailVerificationRequired  = "user.email_verification_required"
	MsgUserVerificationCodeError      = "user.verification_code_error"
	MsgUserInputInvalid               = "user.input_invalid"
	MsgUserNoPermissionSameLevel      = "user.no_permission_same_level"
	MsgUserNoPermissionHigherLevel    = "user.no_permission_higher_level"
	MsgUserCannotCreateHigherLevel    = "user.cannot_create_higher_level"
	MsgUserCannotDeleteRootUser       = "user.cannot_delete_root_user"
	MsgUserCannotDisableRootUser      = "user.cannot_disable_root_user"
	MsgUserCannotDemoteRootUser       = "user.cannot_demote_root_user"
	MsgUserAlreadyAdmin               = "user.already_admin"
	MsgUserAlreadyCommon              = "user.already_common"
	MsgUserAdminCannotPromote         = "user.admin_cannot_promote"
	MsgUserOriginalPasswordError      = "user.original_password_error"
	MsgUserInviteQuotaInsufficient    = "user.invite_quota_insufficient"
	MsgUserTransferQuotaMinimum       = "user.transfer_quota_minimum"
	MsgUserTransferSuccess            = "user.transfer_success"
	MsgUserTransferFailed             = "user.transfer_failed"
	MsgUserTopUpProcessing            = "user.topup_processing"
	MsgUserRegisterFailed             = "user.register_failed"
	MsgUserDefaultTokenFailed         = "user.default_token_failed"
	MsgUserAffCodeEmpty               = "user.aff_code_empty"
	MsgUserEmailEmpty                 = "user.email_empty"
	MsgUserGitHubIdEmpty              = "user.github_id_empty"
	MsgUserDiscordIdEmpty             = "user.discord_id_empty"
	MsgUserOidcIdEmpty                = "user.oidc_id_empty"
	MsgUserWeChatIdEmpty              = "user.wechat_id_empty"
	MsgUserTelegramIdEmpty            = "user.telegram_id_empty"
	MsgUserTelegramNotBound           = "user.telegram_not_bound"
	MsgUserLinuxDOIdEmpty             = "user.linux_do_id_empty"
)

// Quota related messages
const (
	MsgQuotaNegative        = "quota.negative"
	MsgQuotaExceedMax       = "quota.exceed_max"
	MsgQuotaInsufficient    = "quota.insufficient"
	MsgQuotaWarningInvalid  = "quota.warning_invalid"
	MsgQuotaThresholdGtZero = "quota.threshold_gt_zero"
)

// Subscription related messages
const (
	MsgSubscriptionNotEnabled       = "subscription.not_enabled"
	MsgSubscriptionTitleEmpty       = "subscription.title_empty"
	MsgSubscriptionPriceNegative    = "subscription.price_negative"
	MsgSubscriptionPriceMax         = "subscription.price_max"
	MsgSubscriptionPurchaseLimitNeg = "subscription.purchase_limit_negative"
	MsgSubscriptionQuotaNegative    = "subscription.quota_negative"
	MsgSubscriptionGroupNotExists   = "subscription.group_not_exists"
	MsgSubscriptionResetCycleGtZero = "subscription.reset_cycle_gt_zero"
	MsgSubscriptionPurchaseMax      = "subscription.purchase_max"
	MsgSubscriptionInvalidId        = "subscription.invalid_id"
	MsgSubscriptionInvalidUserId    = "subscription.invalid_user_id"
)

// Payment related messages
const (
	MsgPaymentNotConfigured    = "payment.not_configured"
	MsgPaymentMethodNotExists  = "payment.method_not_exists"
	MsgPaymentCallbackError    = "payment.callback_error"
	MsgPaymentCreateFailed     = "payment.create_failed"
	MsgPaymentStartFailed      = "payment.start_failed"
	MsgPaymentAmountTooLow     = "payment.amount_too_low"
	MsgPaymentStripeNotConfig  = "payment.stripe_not_configured"
	MsgPaymentWebhookNotConfig = "payment.webhook_not_configured"
	MsgPaymentPriceIdNotConfig = "payment.price_id_not_configured"
	MsgPaymentCreemNotConfig   = "payment.creem_not_configured"
)

// Topup related messages
const (
	MsgTopupNotProvided    = "topup.not_provided"
	MsgTopupOrderNotExists = "topup.order_not_exists"
	MsgTopupOrderStatus    = "topup.order_status"
	MsgTopupFailed         = "topup.failed"
	MsgTopupInvalidQuota   = "topup.invalid_quota"
)

// Channel related messages
const (
	MsgChannelNotExists           = "channel.not_exists"
	MsgChannelIdFormatError       = "channel.id_format_error"
	MsgChannelNoAvailableKey      = "channel.no_available_key"
	MsgChannelGetListFailed       = "channel.get_list_failed"
	MsgChannelGetTagsFailed       = "channel.get_tags_failed"
	MsgChannelGetKeyFailed        = "channel.get_key_failed"
	MsgChannelGetOllamaFailed     = "channel.get_ollama_failed"
	MsgChannelQueryFailed         = "channel.query_failed"
	MsgChannelNoValidUpstream     = "channel.no_valid_upstream"
	MsgChannelUpstreamSaturated   = "channel.upstream_saturated"
	MsgChannelGetAvailableFailed  = "channel.get_available_failed"
)

// Model related messages
const (
	MsgModelNameEmpty      = "model.name_empty"
	MsgModelNameExists     = "model.name_exists"
	MsgModelIdMissing      = "model.id_missing"
	MsgModelGetListFailed  = "model.get_list_failed"
	MsgModelGetFailed      = "model.get_failed"
	MsgModelResetSuccess   = "model.reset_success"
)

// Vendor related messages
const (
	MsgVendorNameEmpty   = "vendor.name_empty"
	MsgVendorNameExists  = "vendor.name_exists"
	MsgVendorIdMissing   = "vendor.id_missing"
)

// Group related messages
const (
	MsgGroupNameTypeEmpty = "group.name_type_empty"
	MsgGroupNameExists    = "group.name_exists"
	MsgGroupIdMissing     = "group.id_missing"
)

// Checkin related messages
const (
	MsgCheckinDisabled     = "checkin.disabled"
	MsgCheckinAlreadyToday = "checkin.already_today"
	MsgCheckinFailed       = "checkin.failed"
	MsgCheckinQuotaFailed  = "checkin.quota_failed"
)

// Passkey related messages
const (
	MsgPasskeyCreateFailed   = "passkey.create_failed"
	MsgPasskeyLoginAbnormal  = "passkey.login_abnormal"
	MsgPasskeyUpdateFailed   = "passkey.update_failed"
	MsgPasskeyInvalidUserId  = "passkey.invalid_user_id"
	MsgPasskeyVerifyFailed   = "passkey.verify_failed"
)

// 2FA related messages
const (
	MsgTwoFANotEnabled       = "twofa.not_enabled"
	MsgTwoFAUserIdEmpty      = "twofa.user_id_empty"
	MsgTwoFAAlreadyExists    = "twofa.already_exists"
	MsgTwoFARecordIdEmpty    = "twofa.record_id_empty"
	MsgTwoFACodeInvalid      = "twofa.code_invalid"
)

// Rate limit related messages
const (
	MsgRateLimitReached      = "rate_limit.reached"
	MsgRateLimitTotalReached = "rate_limit.total_reached"
)

// Setting related messages
const (
	MsgSettingInvalidType      = "setting.invalid_type"
	MsgSettingWebhookEmpty     = "setting.webhook_empty"
	MsgSettingWebhookInvalid   = "setting.webhook_invalid"
	MsgSettingEmailInvalid     = "setting.email_invalid"
	MsgSettingBarkUrlEmpty     = "setting.bark_url_empty"
	MsgSettingBarkUrlInvalid   = "setting.bark_url_invalid"
	MsgSettingGotifyUrlEmpty   = "setting.gotify_url_empty"
	MsgSettingGotifyTokenEmpty = "setting.gotify_token_empty"
	MsgSettingGotifyUrlInvalid = "setting.gotify_url_invalid"
	MsgSettingUrlMustHttp      = "setting.url_must_http"
	MsgSettingSaved            = "setting.saved"
)

// Deployment related messages (io.net)
const (
	MsgDeploymentNotEnabled     = "deployment.not_enabled"
	MsgDeploymentIdRequired     = "deployment.id_required"
	MsgDeploymentContainerIdReq = "deployment.container_id_required"
	MsgDeploymentNameEmpty      = "deployment.name_empty"
	MsgDeploymentNameTaken      = "deployment.name_taken"
	MsgDeploymentHardwareIdReq  = "deployment.hardware_id_required"
	MsgDeploymentHardwareInvId  = "deployment.hardware_invalid_id"
	MsgDeploymentApiKeyRequired = "deployment.api_key_required"
	MsgDeploymentInvalidPayload = "deployment.invalid_payload"
	MsgDeploymentNotFound       = "deployment.not_found"
)

// Performance related messages
const (
	MsgPerfDiskCacheCleared = "performance.disk_cache_cleared"
	MsgPerfStatsReset       = "performance.stats_reset"
	MsgPerfGcExecuted       = "performance.gc_executed"
)

// Ability related messages
const (
	MsgAbilityDbCorrupted   = "ability.db_corrupted"
	MsgAbilityRepairRunning = "ability.repair_running"
)

// OAuth related messages
const (
	MsgOAuthInvalidCode          = "oauth.invalid_code"
	MsgOAuthGetUserErr           = "oauth.get_user_error"
	MsgOAuthAccountUsed          = "oauth.account_used"
	MsgOAuthUnknownProvider      = "oauth.unknown_provider"
	MsgOAuthStateInvalid         = "oauth.state_invalid"
	MsgOAuthNotEnabled           = "oauth.not_enabled"
	MsgOAuthUserDeleted          = "oauth.user_deleted"
	MsgOAuthUserBanned           = "oauth.user_banned"
	MsgOAuthBindSuccess          = "oauth.bind_success"
	MsgOAuthAlreadyBound         = "oauth.already_bound"
	MsgOAuthConnectFailed        = "oauth.connect_failed"
	MsgOAuthTokenFailed          = "oauth.token_failed"
	MsgOAuthUserInfoEmpty        = "oauth.user_info_empty"
	MsgOAuthTrustLevelLow        = "oauth.trust_level_low"
)

// Model layer error messages (for translation in controller)
const (
	MsgRedeemFailed          = "redeem.failed"
	MsgCreateDefaultTokenErr = "user.create_default_token_error"
	MsgUuidDuplicate         = "common.uuid_duplicate"
	MsgInvalidInput          = "common.invalid_input"
)

// Custom OAuth provider related messages
const (
	MsgCustomOAuthNotFound           = "custom_oauth.not_found"
	MsgCustomOAuthSlugEmpty          = "custom_oauth.slug_empty"
	MsgCustomOAuthSlugExists         = "custom_oauth.slug_exists"
	MsgCustomOAuthNameEmpty          = "custom_oauth.name_empty"
	MsgCustomOAuthHasBindings        = "custom_oauth.has_bindings"
	MsgCustomOAuthBindingNotFound    = "custom_oauth.binding_not_found"
	MsgCustomOAuthProviderIdInvalid  = "custom_oauth.provider_id_field_invalid"
)
