"""Server-only policy and bounded-input constants."""

from __future__ import annotations


SERVER_NAME = "Apolon Licensing Authority"
API_V1_PREFIX = "/v1"
DATABASE_POOL_RECYCLE_SECONDS = 1800
DATABASE_POOL_PRE_PING = True
DEFAULT_IDEMPOTENCY_DAYS = 7
DEFAULT_NOT_BEFORE_SKEW_SECONDS = 60
LEGACY_CONNECTED_REFRESH_TARGET_HOURS = 720
LEGACY_OFFLINE_REFRESH_REMINDER_DAYS = 90
ORGANIZATION_INVITATION_DAYS = 7
ORGANIZATION_SEAT_REASSIGNMENT_REVIEW_DAYS = 7
MAX_SERIAL_BATCH_QUANTITY = 1000
MAX_IDEMPOTENCY_KEY_CHARACTERS = 128
MAX_FRIENDLY_DEVICE_NAME_CHARACTERS = 128
MAX_EXTERNAL_SUBJECT_CHARACTERS = 256
MAX_VERIFIED_EMAIL_CHARACTERS = MAX_EXTERNAL_SUBJECT_CHARACTERS
MAX_BEARER_TOKEN_CHARACTERS = 8192
MAX_OIDC_JWKS_KEYS = 64
MAX_OIDC_JWKS_RESPONSE_BYTES = 256 * 1024
OIDC_JWKS_CACHE_SECONDS = 300
OIDC_JWKS_HTTP_TIMEOUT_SECONDS = 5
MAX_OIDC_SCOPE_CHARACTERS = 128
MAX_OIDC_SCOPE_COUNT = 64
MAX_AUDIT_METADATA_CHARACTERS = 8192
MAX_REASON_CHARACTERS = 512
MAX_SUPPORT_TIMELINE_EVENTS = 100
MAX_API_REQUEST_BODY_BYTES = 1024 * 1024
MAX_WEBHOOK_BODY_BYTES = 1024 * 1024
RATE_LIMIT_CLEANUP_REQUEST_INTERVAL = 256
RATE_LIMIT_MAXIMUM_PROXY_CHAIN_LENGTH = 32
RATE_LIMIT_MAXIMUM_REQUESTS_PER_WINDOW = 1_000_000
RATE_LIMIT_MAXIMUM_SUBJECT_CHARACTERS = 512
RATE_LIMIT_MAXIMUM_TRUSTED_PROXY_NETWORKS = 64
RATE_LIMIT_MAXIMUM_WINDOW_SECONDS = 31 * 24 * 60 * 60
RATE_LIMIT_SERIAL_INPUT_CHARACTERS = 128
SERIAL_PEPPER_MINIMUM_BYTES = 32
FINGERPRINT_PEPPER_MINIMUM_BYTES = 32
NOTIFICATION_PEPPER_MINIMUM_BYTES = 32
SUPPORT_GRANT_REVOCATION_REASONS = frozenset(
    ("refund", "chargeback", "duplicate_grant", "fraud", "support_correction")
)
SUPPORT_DEVICE_RECOVERY_REASONS = frozenset(
    ("customer_recovered_device", "false_loss_report", "support_correction")
)
SERIAL_BATCH_REVOCATION_REASONS = frozenset(
    (
        "campaign_cancelled",
        "fraud_response",
        "order_cancelled",
        "serial_exposure",
        "support_correction",
    )
)
SIGNING_KEY_CHANGE_REASONS = frozenset(
    (
        "compromise_recovery",
        "initial_provisioning",
        "planned_rotation",
        "support_correction",
    )
)
SIGNING_KEY_COMPROMISE_REASONS = frozenset(("compromise_response",))
CATALOG_RELEASE_REASONS = frozenset(
    (
        "commercial_policy_update",
        "initial_provisioning",
        "planned_catalog_release",
        "support_correction",
    )
)
PRIVACY_DELETION_REASONS = frozenset(
    (
        "customer_request",
        "duplicate_account",
        "legal_request",
        "support_correction",
    )
)
SUPPORT_TRIAL_EXTENSION_REASONS = frozenset(
    ("evaluation_extension", "customer_recovery", "support_correction")
)
OFFLINE_TRIAL_APPROVAL_REASONS = frozenset(
    ("evaluation_request", "accessibility_accommodation", "support_recovery")
)
OFFLINE_TRIAL_REJECTION_REASONS = frozenset(
    ("trial_policy_ineligible", "duplicate_request", "unsupported_environment")
)


__all__ = [
    "API_V1_PREFIX",
    "CATALOG_RELEASE_REASONS",
    "DATABASE_POOL_PRE_PING",
    "DATABASE_POOL_RECYCLE_SECONDS",
    "DEFAULT_IDEMPOTENCY_DAYS",
    "DEFAULT_NOT_BEFORE_SKEW_SECONDS",
    "FINGERPRINT_PEPPER_MINIMUM_BYTES",
    "LEGACY_CONNECTED_REFRESH_TARGET_HOURS",
    "LEGACY_OFFLINE_REFRESH_REMINDER_DAYS",
    "MAX_AUDIT_METADATA_CHARACTERS",
    "MAX_API_REQUEST_BODY_BYTES",
    "MAX_BEARER_TOKEN_CHARACTERS",
    "MAX_EXTERNAL_SUBJECT_CHARACTERS",
    "MAX_FRIENDLY_DEVICE_NAME_CHARACTERS",
    "MAX_IDEMPOTENCY_KEY_CHARACTERS",
    "MAX_OIDC_JWKS_KEYS",
    "MAX_OIDC_JWKS_RESPONSE_BYTES",
    "MAX_OIDC_SCOPE_CHARACTERS",
    "MAX_OIDC_SCOPE_COUNT",
    "MAX_REASON_CHARACTERS",
    "MAX_SERIAL_BATCH_QUANTITY",
    "MAX_SUPPORT_TIMELINE_EVENTS",
    "MAX_WEBHOOK_BODY_BYTES",
    "MAX_VERIFIED_EMAIL_CHARACTERS",
    "NOTIFICATION_PEPPER_MINIMUM_BYTES",
    "ORGANIZATION_INVITATION_DAYS",
    "ORGANIZATION_SEAT_REASSIGNMENT_REVIEW_DAYS",
    "OFFLINE_TRIAL_APPROVAL_REASONS",
    "OFFLINE_TRIAL_REJECTION_REASONS",
    "OIDC_JWKS_CACHE_SECONDS",
    "OIDC_JWKS_HTTP_TIMEOUT_SECONDS",
    "PRIVACY_DELETION_REASONS",
    "RATE_LIMIT_CLEANUP_REQUEST_INTERVAL",
    "RATE_LIMIT_MAXIMUM_PROXY_CHAIN_LENGTH",
    "RATE_LIMIT_MAXIMUM_REQUESTS_PER_WINDOW",
    "RATE_LIMIT_MAXIMUM_SUBJECT_CHARACTERS",
    "RATE_LIMIT_MAXIMUM_TRUSTED_PROXY_NETWORKS",
    "RATE_LIMIT_MAXIMUM_WINDOW_SECONDS",
    "RATE_LIMIT_SERIAL_INPUT_CHARACTERS",
    "SERIAL_PEPPER_MINIMUM_BYTES",
    "SERIAL_BATCH_REVOCATION_REASONS",
    "SERVER_NAME",
    "SIGNING_KEY_CHANGE_REASONS",
    "SIGNING_KEY_COMPROMISE_REASONS",
    "SUPPORT_GRANT_REVOCATION_REASONS",
    "SUPPORT_DEVICE_RECOVERY_REASONS",
    "SUPPORT_TRIAL_EXTENSION_REASONS",
]

