variable "aws_region" {
  default     = "us-east-1"
  description = "AWS region"
}

variable "environment" {
  description = "Available values:  dev, qa, prod."
  default     = "prod"
}

variable "service_name" {
  default = "lambda-abacus"
}

variable "application_family" {
  default     = "accounting"
  description = "Application family to which abacus belongs"
}

variable "lambda_provisioned_concurrent_executions" {
  default = 1
}

variable "vpc_id" {
  type        = string
  description = "VPC ID where the lambdas will execute"
  default     = "vpc-7f0e841a"
}

variable "vpc_subnet_ids" {
  default     = ["subnet-cb4dbae0", "subnet-5366ef24"]
  description = "VPC subnet IDs where the lambda will execute"
  type        = list(string)
}

variable "sales_files_bucket_arn" {
  default = "arn:aws:s3:::prod-royalties-sales-files"
}

variable "sales_files_bucket_name" {
  default = "prod-royalties-sales-files"
}

variable "abacus_adjustments_bucket_arn" {
  default = "arn:aws:s3:::prod-abacus-adjustments"
}

variable "abacus_adjustments_bucket_name" {
  default = "prod-abacus-adjustments"
}

variable "json_contract_file_import_bucket_name" {
  default = "abacus-json-contract-file-import"
}

variable "sap_env" {
  default     = "7000"
  description = "Port for SAP API"
}

variable "sap_api" {
  default     = "https://connect-tsme.sonymusic.com"
  description = "URL root for SAP API"
}

variable "lambda_snowflake_account" {
  description = "Snowflake account"
  default     = "delphi.us-east-1"
}

variable "lambda_snowflake_database" {
  description = "Snowflake database"
  default     = "ROYALTY_ACCOUNTING"
}

variable "lambda_snowflake_schema" {
  description = "Snowflake schema"
  default     = "PROD"
}

variable "lambda_snowflake_warehouse" {
  description = "Snowflake warehouse"
  default     = "PROD_ABACUS_WH"
}

variable "lambda_snowflake_role" {
  description = "Snowflake role"
  default     = "ROYALTYACCOUNTING_DB_PROD_SCHEMA_READWRITE"
}

variable "lambda_dbt_warehouse" {
  description = "Snowflake dbt warehouse"
  default     = "PROD_ACCOUNTING_DBT_WAREHOUSE"
}

variable "lambda_dbt_role" {
  description = "Snowflake dbt role"
  default     = "PROD_ACCOUNTING_DBT_SCHEDULER"
}

variable "lambda_snowflake_user" {
  description = "User used to log in to Snowflake"
  default     = "LAMBDA_ROYALTY_ACCOUNTING"
}

variable "secrets_manager_secret_names" {
  description = "List of secrets manager secrets to create"
  type        = list(string)
  default = [
    "SNOWFLAKE_KEY_PASSPHRASE",
    "SNOWFLAKE_USER",
    "SNOWFLAKE_PASSWORD",
    "SNOWFLAKE_PRIVATE_KEY",
    "MYSQL_DB_PASS"
  ]
}

variable "schedule_auto_add_secrets_manager_secret_names" {
  description = "List of secrets manager secrets for sync_contract_sap lambda"
  type        = list(string)
  default = [
    "ORCHARD_PROFILE_UUID",
    "ORCHARD_PROFILE_ID",
    "ORCHARD_IDENTITY_ID"
  ]
}

variable "sync_account_secrets_manager_secret_names" {
  description = "List of secrets manager secrets for sync_account lambda"
  type        = list(string)
  default = [
    "ORCHARD_PROFILE_UUID",
    "ORCHARD_PROFILE_ID",
    "ORCHARD_IDENTITY_ID"
  ]
}

variable "sync_contract_sap_secrets_manager_secret_names" {
  description = "List of secrets manager secrets for sync_contract_sap lambda"
  type        = list(string)
  default = [
    "sap_auth_username",
    "sap_auth_password",
    "MYSQL_DB_PASS"
  ]
}

variable "accounting_run_balance_secrets_manager_secret_names" {
  description = "List of secrets manager secrets for ledger_accounting_run_balance lambda"
  type        = list(string)
  default = [
    "ORCHARD_PROFILE_UUID",
    "ORCHARD_PROFILE_ID",
    "ORCHARD_IDENTITY_ID"
  ]
}

variable "trigger_msk_cluster_name" {
  description = "MSK cluster name"
  default     = "prod-managed-kafka-cdc-destination"
}

variable "trigger_msk_cluster_uuid" {
  description = "MSK cluster uuid"
  default     = "b103e027-ec75-4982-8d15-5bddc5e33831-6"
}

variable "contribution_metadata_topic" {
  description = "Topic that the auto-add-contribution lambda will subscribe to"
  default     = "event.nr.contribution.metadata"
}

variable "trigger_msk_artist_diy_cluster_name" {
  description = "MSK artist_diy cluster name"
  default     = "prod-managed-kafka-artist-diy"
}

variable "trigger_msk_artist_diy_cluster_uuid" {
  description = "MSK artist_diy cluster uuid"
  default     = "8ce499ad-b29b-4064-b7e1-1e3f1c5e59a0-6"
}

variable "accounts_topic" {
  description = "MSK topic that triggers the sync_account lambda"
  default     = "event.accounts"
}

variable "av_scan_lambda_function_name" {
  default = "lambda-av-scan-containerized"
}

variable "graphql_url" {
  description = "GraphQL gateway URL"
  default     = "https://prod-graphql-router.theorchard.io/graphql"
}

variable "lambda_snowflake_orchard_app_database" {
  description = "Snowflake ORCHARD_APP_REPORTING_V2 database"
  default     = "ORCHARD_APP_REPORTING_V2"
}

variable "fivetran_schema" {
  description = "Replicated royalty_accounting database in snowflake"
  default     = "PROD_ROYALTY_ACCOUNTING_ROYALTY_ACCOUNTING"
}

variable "notification_endpoints" {
  description = "Endpoints for alerts. Can be email, slack, on-call, etc"
  type        = string
  default     = "@slack-abacus-monitoring"
}

variable "escalation_notification_endpoints" {
  description = "Endpoints for escalation alerts. Can be email, slack, on-call, etc"
  type        = string
  default     = "@slack-The_Orchard-accounting-outage"
}

variable "on_call_endpoint" {
  type    = string
  default = "@oncall-abacus"
}

variable "datadog_error_monitor_threshold" {
  default = 10000
}

variable "datadog_warning_monitor_threshold" {
  default = 5000
}

variable "datadog_recovery_monitor_threshold" {
  default = 0
}

variable "sync_account_kafka_topic" {
  default = "event.accounts"
}

variable "datadog_sync_account_error_monitor_threshold" {
  default     = 5
  description = "Error threshold for offset lags across partitions in the event.accounts topic"
}

variable "datadog_sync_account_warning_monitor_threshold" {
  default     = 3
  description = "Warning threshold for offset lags across partitions in the event.accounts topic"
}

variable "datadog_sync_account_recovery_monitor_threshold" {
  default     = 0
  description = "Recovery threshold for offset lags across partitions in the event.accounts topic"
}

variable "lambda_abacus_mysql_database" {
  description = "Abacus database name"
  type        = string
  default     = "royalty_accounting"
}

variable "lambda_abacus_mysql_host" {
  description = "Abacus database host url"
  type        = string
  default     = "prod-royalty-accounting-db.theorchard.io"
}

variable "lambda_abacus_mysql_user" {
  description = "Abacus database username"
  type        = string
  default     = "lambda-abacus"
}

variable "lambda_abacus_ar_mysql_database" {
  description = "Database name"
  type        = string
  default     = "art_relations"
}

variable "lambda_abacus_ar_mysql_host" {
  description = "art_relations database host url"
  type        = string
  default     = "ar-db.theorchard.com"
}

variable "lambda_abacus_ar_mysql_user" {
  description = "art_relations database username"
  type        = string
  default     = "lambda-abacus-art-relations"
}

variable "datadog_invocation_error_monitor_threshold" {
  default = 0
}

variable "datadog_invocation_recovery_monitor_threshold" {
  default = 0.9
}

variable "teams" {
  type        = set(string)
  description = "A set of Datadog Teams to associate the resources with"
  default     = ["abacus"]
}


variable "territory_backfill_secrets_manager_secret_names" {
  description = "List of secrets manager secrets for royalty_collection_territory_backfill lambda"
  type        = list(string)
  default = [
    "ART_RELATIONS_MYSQL_DB_PASS",
    "ROYALTY_ACCOUNTING_MYSQL_DB_PASS",
    "SLACK_BOT_TOKEN",
    "CHANNEL_ID"
  ]
}

variable "adjustments_json_import_secret_names" {
  description = "List of secrets manager secrets to create"
  type        = list(string)
  default = [
    "MYSQL_DB_PASS"
  ]
}


variable "adjustments_json_validation_secrets" {
  description = "List of secrets manager secrets to create"
  type        = list(string)
  default = [
    "SNOWFLAKE_KEY_PASSPHRASE",
    "SNOWFLAKE_PRIVATE_KEY"
  ]
}

variable "s3_bucket_adjustments_snowflake_stage" {
  description = "Snowflake stage for prod-abacus-adjustments s3 bucket"
  type        = string
  default     = "prod-abacus-adjustments-s3-stage"
}

# ==============================================================================
# Accounting Run Pipeline - Duration Monitor Thresholds (in milliseconds)
# ==============================================================================

variable "ledger_accounting_run_balance_duration_threshold" {
  description = "Critical duration threshold in ms for ledger-accounting-run-balance. Default 2h; conservative starting point, adjust based on observed production performance."
  default     = 7200000
}

variable "ledger_accounting_run_balance_duration_warning_threshold" {
  description = "Warning duration threshold in ms for ledger-accounting-run-balance. Default 1h; conservative starting point, adjust based on observed production performance."
  default     = 3600000
}

variable "commit_royalties_duration_threshold" {
  description = "Critical duration threshold in ms for commit-royalties. Default 2h; conservative starting point, adjust based on observed production performance."
  default     = 7200000
}

variable "commit_royalties_duration_warning_threshold" {
  description = "Warning duration threshold in ms for commit-royalties. Default 1h; conservative starting point, adjust based on observed production performance."
  default     = 3600000
}

variable "commit_mechanicals_duration_threshold" {
  description = "Critical duration threshold in ms for commit-mechanicals. Default 2h; conservative starting point, adjust based on observed production performance."
  default     = 7200000
}

variable "commit_mechanicals_duration_warning_threshold" {
  description = "Warning duration threshold in ms for commit-mechanicals. Default 1h; conservative starting point, adjust based on observed production performance."
  default     = 3600000
}

variable "reserves_take_duration_threshold" {
  description = "Critical duration threshold in ms for reserves-take. Default 2h; conservative starting point, adjust based on observed production performance."
  default     = 7200000
}

variable "reserves_take_duration_warning_threshold" {
  description = "Warning duration threshold in ms for reserves-take. Default 1h; conservative starting point, adjust based on observed production performance."
  default     = 3600000
}

variable "reserves_schedule_duration_threshold" {
  description = "Critical duration threshold in ms for reserves-schedule. Default 2h; conservative starting point, adjust based on observed production performance."
  default     = 7200000
}

variable "reserves_schedule_duration_warning_threshold" {
  description = "Warning duration threshold in ms for reserves-schedule. Default 1h; conservative starting point, adjust based on observed production performance."
  default     = 3600000
}

variable "file_upload_complete_secrets_manager_secret_names" {
  description = "List of secrets manager secrets for file_upload_complete lambda"
  type        = list(string)
  default     = []
}

variable "file_upload_initialize_secrets_manager_secret_names" {
  description = "List of secrets manager secrets for file_upload_initialize lambda"
  type        = list(string)
  default     = []
}

variable "splitio_api_key_ro_policy_name" {
  type        = string
  description = "IAM policy to read SplitIO key."
  default     = "secretsmanager-prod-python-orchard-features-SPLITIO_API_KEY-ro"
}

variable "adjustment_file_initialize_secrets_manager_secret_names" {
  description = "List of secrets manager secrets for adjustment_file_initialize lambda"
  type        = list(string)
  default = [
    "SPLITIO_API_KEY",
    "MYSQL_DB_PASS",
    "ORCHARD_IDENTITY_ID"
  ]
}

variable "payment_allocation_secrets_manager_secret_names" {
  description = "List of secrets manager secrets for payment_allocation lambda"
  type        = list(string)
  default = [
    "SPLITIO_API_KEY",
    "MYSQL_DB_PASS",
    "ORCHARD_IDENTITY_ID"
  ]
}

variable "outbox_process_secrets_manager_secret_names" {
  description = "List of secrets manager secrets for outbox_process lambda"
  type        = list(string)
  default = [
    "MYSQL_DB_PASS"
  ]
}

variable "outbox_process_schedule_expression" {
  description = "EventBridge schedule expression for outbox process polling"
  type        = string
  default     = "cron(* * * * ? *)"
}
