import * as ecs from 'aws-cdk-lib/aws-ecs';
import { Construct } from 'constructs';
import * as secretsmanager from 'aws-cdk-lib/aws-secretsmanager';

// Retrieve the secret from AWS Secrets Manager
export const studioSecret = (scope: Construct, accountStage: string) => {
  if (accountStage === 'staging') {
    return secretsmanager.Secret.fromSecretAttributes(scope, 'studio-api-staging-envs', {
      secretCompleteArn: 'arn:aws:secretsmanager:us-east-2:590183763515:secret:studio-api-staging-envs-bBdsOo',
    });
  }
  if (accountStage === 'prod') {
    return secretsmanager.Secret.fromSecretAttributes(scope, 'studio-api-prod-envs', {
      secretCompleteArn: 'arn:aws:secretsmanager:us-east-2:734185074900:secret:studio-api-prod-envs-nu1Nk2',
    });
  }
  return secretsmanager.Secret.fromSecretAttributes(scope, 'studio-api-staging-envs', {
    secretCompleteArn: 'arn:aws:secretsmanager:us-east-2:590183763515:secret:studio-api-staging-envs-bBdsOo',
  });
};

export const studioSecrets = (scope: Construct, accountStage: string, useReplica: boolean) => {
  const secret = studioSecret(scope, accountStage);
  let secrets = {
    CHOPIN_EVENT_SERVICE_URL: ecs.Secret.fromSecretsManager(secret, 'CHOPIN_EVENT_SERVICE_URL'),
    HIVE_API_KEY: ecs.Secret.fromSecretsManager(secret, 'HIVE_API_KEY'),
    REPLICA_DATABASE_URL: useReplica
      ? ecs.Secret.fromSecretsManager(secret, 'REPLICA_DATABASE_URL')
      : ecs.Secret.fromSecretsManager(secret, 'DATABASE_URL'),
    ANTHROPIC_API_KEY: ecs.Secret.fromSecretsManager(secret, 'ANTHROPIC_API_KEY'),
    AWS_ACCESS_KEY_ID: ecs.Secret.fromSecretsManager(secret, 'AWS_ACCESS_KEY_ID'),
    AWS_SECRET_ACCESS_KEY: ecs.Secret.fromSecretsManager(secret, 'AWS_SECRET_ACCESS_KEY'),
    CALLBACK_HOST: ecs.Secret.fromSecretsManager(secret, 'CALLBACK_HOST'),
    CELERY_REDIS_URL: ecs.Secret.fromSecretsManager(secret, 'CELERY_REDIS_URL'),
    CF_ACCESS_KEY_ID: ecs.Secret.fromSecretsManager(secret, 'CF_ACCESS_KEY_ID'),
    CF_SECRET_ACCESS_KEY: ecs.Secret.fromSecretsManager(secret, 'CF_SECRET_ACCESS_KEY'),
    CLERK_SECRET_KEY: ecs.Secret.fromSecretsManager(secret, 'CLERK_SECRET_KEY'),
    CLOUDFRONT_DISTRIBUTION_ID: ecs.Secret.fromSecretsManager(secret, 'CLOUDFRONT_DISTRIBUTION_ID'),
    DATABASE_IAM_ROLE_ARN: ecs.Secret.fromSecretsManager(secret, 'DATABASE_IAM_ROLE_ARN'),
    DATABASE_URL: ecs.Secret.fromSecretsManager(secret, 'DATABASE_URL'),
    DATABASE_URL_2: ecs.Secret.fromSecretsManager(secret, 'DATABASE_URL_2'),
    DD_AGENT_HOST: ecs.Secret.fromSecretsManager(secret, 'DD_AGENT_HOST'),
    DD_API_KEY: ecs.Secret.fromSecretsManager(secret, 'DD_API_KEY'),
    DD_ENV: ecs.Secret.fromSecretsManager(secret, 'DD_ENV'),
    DD_LOGS_INJECTION: ecs.Secret.fromSecretsManager(secret, 'DD_LOGS_INJECTION'),
    DD_PROFILING_ENABLED: ecs.Secret.fromSecretsManager(secret, 'DD_PROFILING_ENABLED'),
    DD_SERVICE: ecs.Secret.fromSecretsManager(secret, 'DD_SERVICE'),
    DD_TRACE_AGENT_PORT: ecs.Secret.fromSecretsManager(secret, 'DD_TRACE_AGENT_PORT'),
    DD_TRACE_SAMPLING_RULES: ecs.Secret.fromSecretsManager(secret, 'DD_TRACE_SAMPLING_RULES'),
    DD_RUNTIME_METRICS_ENABLED: ecs.Secret.fromSecretsManager(secret, 'DD_RUNTIME_METRICS_ENABLED'),
    DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED: ecs.Secret.fromSecretsManager(secret, 'DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED'),
    DISCORD_BOT_REDIS_RESULTS_QUEUE: ecs.Secret.fromSecretsManager(secret, 'DISCORD_BOT_REDIS_RESULTS_QUEUE'),
    DISCORD_CLIENT_TOKEN: ecs.Secret.fromSecretsManager(secret, 'DISCORD_CLIENT_TOKEN'),
    DISCORD_PUBLIC_KEY: ecs.Secret.fromSecretsManager(secret, 'DISCORD_PUBLIC_KEY'),
    ENFORCE_GENERATION_LIMIT: ecs.Secret.fromSecretsManager(secret, 'ENFORCE_GENERATION_LIMIT'),
    ENV_NAME: ecs.Secret.fromSecretsManager(secret, 'ENV_NAME'),
    ES_API_KEY: ecs.Secret.fromSecretsManager(secret, 'ES_API_KEY'),
    ES_HTTP_ADDR: ecs.Secret.fromSecretsManager(secret, 'ES_HTTP_ADDR'),
    ES_INDEX_PREFIX: ecs.Secret.fromSecretsManager(secret, 'ES_INDEX_PREFIX'),
    HCAPTCHA_SECRET: ecs.Secret.fromSecretsManager(secret, 'HCAPTCHA_SECRET'),
    IAM_DATABASE_URL: ecs.Secret.fromSecretsManager(secret, 'IAM_DATABASE_URL'),
    IAM_PERCENT: ecs.Secret.fromSecretsManager(secret, 'IAM_PERCENT'),
    IAM_READ_REPLICA_DATABASE_URL: ecs.Secret.fromSecretsManager(secret, 'IAM_READ_REPLICA_DATABASE_URL'),
    IAM_REPLICA_DATABASE_URL: ecs.Secret.fromSecretsManager(secret, 'IAM_REPLICA_DATABASE_URL'),
    READ_REPLICA_DATABASE_URL: ecs.Secret.fromSecretsManager(secret, 'READ_REPLICA_DATABASE_URL'),
    JWKS_CLIENT_URL: ecs.Secret.fromSecretsManager(secret, 'JWKS_CLIENT_URL'),
    MIXPANEL_TOKEN: ecs.Secret.fromSecretsManager(secret, 'MIXPANEL_TOKEN'),
    MODAL_CALLBACK_TOKEN: ecs.Secret.fromSecretsManager(secret, 'MODAL_CALLBACK_TOKEN'),
    MODAL_CALLBACK_URL: ecs.Secret.fromSecretsManager(secret, 'MODAL_CALLBACK_URL'),
    MODAL_TOKEN_ID: ecs.Secret.fromSecretsManager(secret, 'MODAL_TOKEN_ID'),
    MODAL_TOKEN_SECRET: ecs.Secret.fromSecretsManager(secret, 'MODAL_TOKEN_SECRET'),
    OPENAI_KEY: ecs.Secret.fromSecretsManager(secret, 'OPENAI_KEY'),
    REDIS_URL: ecs.Secret.fromSecretsManager(secret, 'REDIS_URL'),
    REVCAT_WEBHOOK_BEARER_TOKEN: ecs.Secret.fromSecretsManager(secret, 'REVCAT_WEBHOOK_BEARER_TOKEN'),
    SECRET_KEY: ecs.Secret.fromSecretsManager(secret, 'SECRET_KEY'),
    SENTRY_DSN: ecs.Secret.fromSecretsManager(secret, 'SENTRY_DSN'),
    SNOWFLAKE_SECRET_NAME: ecs.Secret.fromSecretsManager(secret, 'SNOWFLAKE_SECRET_NAME'),
    SNOWFLAKE_SECRET_REGION: ecs.Secret.fromSecretsManager(secret, 'SNOWFLAKE_SECRET_REGION'),
    STATSIG_SECRET_KEY: ecs.Secret.fromSecretsManager(secret, 'STATSIG_SECRET_KEY'),
    STRIPE_PUBLISHABLE_KEY: ecs.Secret.fromSecretsManager(secret, 'STRIPE_PUBLISHABLE_KEY'),
    STRIPE_SECRET_KEY: ecs.Secret.fromSecretsManager(secret, 'STRIPE_SECRET_KEY'),
    STRIPE_WEBHOOK_SECRET: ecs.Secret.fromSecretsManager(secret, 'STRIPE_WEBHOOK_SECRET'),
    SUPABASE_JWT_SECRET: ecs.Secret.fromSecretsManager(secret, 'SUPABASE_JWT_SECRET'),
    TURBOPUFFER_KEY: ecs.Secret.fromSecretsManager(secret, 'TURBOPUFFER_KEY'),
    TWITTER_ACCESS_TOKEN: ecs.Secret.fromSecretsManager(secret, 'TWITTER_ACCESS_TOKEN'),
    TWITTER_ACCESS_TOKEN_SECRET: ecs.Secret.fromSecretsManager(secret, 'TWITTER_ACCESS_TOKEN_SECRET'),
    TWITTER_CONSUMER_KEY: ecs.Secret.fromSecretsManager(secret, 'TWITTER_CONSUMER_KEY'),
    TWITTER_CONSUMER_SECRET: ecs.Secret.fromSecretsManager(secret, 'TWITTER_CONSUMER_SECRET'),
    TWITTER_BEARER_TOKEN: ecs.Secret.fromSecretsManager(secret, 'TWITTER_BEARER_TOKEN'),
    TWITTER_BOT_SUNO_TOKEN: ecs.Secret.fromSecretsManager(secret, 'TWITTER_BOT_SUNO_TOKEN'),
    TWITTER_BOT_ACCOUNT_ID: ecs.Secret.fromSecretsManager(secret, 'TWITTER_BOT_ACCOUNT_ID'),
    USE_IAM_AUTH: ecs.Secret.fromSecretsManager(secret, 'USE_IAM_AUTH'),
    V2_GENERATE_URL: ecs.Secret.fromSecretsManager(secret, 'V2_GENERATE_URL'),
    WEB_APP_BASE_URL: ecs.Secret.fromSecretsManager(secret, 'WEB_APP_BASE_URL'),
    ELB_HOST: ecs.Secret.fromSecretsManager(secret, 'ELB_HOST'),
    SLACK_TECH_ALERT_WEBHOOK: ecs.Secret.fromSecretsManager(secret, 'SLACK_TECH_ALERT_WEBHOOK'),
    DELETE_MEDIA_SQS_QUEUE_URL: ecs.Secret.fromSecretsManager(secret, 'DELETE_MEDIA_SQS_QUEUE_URL'),
    STATSIG_AUTOCOMPLETE_API_KEY: ecs.Secret.fromSecretsManager(secret, 'STATSIG_AUTOCOMPLETE_API_KEY'),
    STATSIG_PROXY_URL: ecs.Secret.fromSecretsManager(secret, 'STATSIG_PROXY_URL'),
    KINESIS_ACCESS_KEY_ID: ecs.Secret.fromSecretsManager(secret, 'KINESIS_ACCESS_KEY_ID'),
    KINESIS_SECRET_ACCESS_KEY: ecs.Secret.fromSecretsManager(secret, 'KINESIS_SECRET_ACCESS_KEY'),
    CLERK_WEBHOOK_SECRET: ecs.Secret.fromSecretsManager(secret, 'CLERK_WEBHOOK_SECRET'),
    GOOGLE_PRIVATE_KEY: ecs.Secret.fromSecretsManager(secret, 'GOOGLE_PRIVATE_KEY'),
    GOOGLE_PRIVATE_KEY_ID: ecs.Secret.fromSecretsManager(secret, 'GOOGLE_PRIVATE_KEY_ID'),
    GOOGLE_PROJECT_ID: ecs.Secret.fromSecretsManager(secret, 'GOOGLE_PROJECT_ID'),
    GOOGLE_CLIENT_ID: ecs.Secret.fromSecretsManager(secret, 'GOOGLE_CLIENT_ID'),
    GOOGLE_CLIENT_EMAIL: ecs.Secret.fromSecretsManager(secret, 'GOOGLE_CLIENT_EMAIL'),
    GOOGLE_SHEET_ID: ecs.Secret.fromSecretsManager(secret, 'GOOGLE_SHEET_ID'),
    GOOGLE_CLIENT_X509_CERT_URL: ecs.Secret.fromSecretsManager(secret, 'GOOGLE_CLIENT_X509_CERT_URL'),
    BRAZE_API_KEY: ecs.Secret.fromSecretsManager(secret, 'BRAZE_API_KEY'),
    LYRICS_MOD_ES_URL: ecs.Secret.fromSecretsManager(secret, 'LYRICS_MOD_ES_URL'),
    LYRICS_MOD_ES_KEY: ecs.Secret.fromSecretsManager(secret, 'LYRICS_MOD_ES_KEY'),
    HONEYPOT_SEAL_KEY: ecs.Secret.fromSecretsManager(secret, 'HONEYPOT_SEAL_KEY'),
    HF_API_KEY: ecs.Secret.fromSecretsManager(secret, 'HF_API_KEY'),
    HF_SECRET: ecs.Secret.fromSecretsManager(secret, 'HF_SECRET'),
    MINIMAX_GROUP_ID: ecs.Secret.fromSecretsManager(secret, 'MINIMAX_GROUP_ID'),
    MINIMAX_API_KEY: ecs.Secret.fromSecretsManager(secret, 'MINIMAX_API_KEY'),
    // Clerkless Authentication
    CLERK_USE_INTERNAL_AUTH: ecs.Secret.fromSecretsManager(secret, 'CLERK_USE_INTERNAL_AUTH'),
    CLERK_API_BASE_URL: ecs.Secret.fromSecretsManager(secret, 'CLERK_API_BASE_URL'),
    CLERK_JWT_PRIVATE_KEY: ecs.Secret.fromSecretsManager(secret, 'CLERK_JWT_PRIVATE_KEY'),
    CLERK_JWT_PUBLIC_KEY: ecs.Secret.fromSecretsManager(secret, 'CLERK_JWT_PUBLIC_KEY'),
    CLERK_PROXY_URL: ecs.Secret.fromSecretsManager(secret, 'CLERK_PROXY_URL'),
    CLERK_PROXY_SECRET_KEY: ecs.Secret.fromSecretsManager(secret, 'CLERK_PROXY_SECRET_KEY'),
    PRELUDE_API_KEY: ecs.Secret.fromSecretsManager(secret, 'PRELUDE_API_KEY'),
    SOCIAL_AUTH_GOOGLE_OAUTH2_KEY: ecs.Secret.fromSecretsManager(secret, 'SOCIAL_AUTH_GOOGLE_OAUTH2_KEY'),
    SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET: ecs.Secret.fromSecretsManager(secret, 'SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET'),
    SOCIAL_AUTH_DISCORD_OAUTH2_KEY: ecs.Secret.fromSecretsManager(secret, 'SOCIAL_AUTH_DISCORD_OAUTH2_KEY'),
    SOCIAL_AUTH_DISCORD_OAUTH2_SECRET: ecs.Secret.fromSecretsManager(secret, 'SOCIAL_AUTH_DISCORD_OAUTH2_SECRET'),
    SOCIAL_AUTH_MICROSOFT_OAUTH2_KEY: ecs.Secret.fromSecretsManager(secret, 'SOCIAL_AUTH_MICROSOFT_OAUTH2_KEY'),
    SOCIAL_AUTH_MICROSOFT_OAUTH2_SECRET: ecs.Secret.fromSecretsManager(secret, 'SOCIAL_AUTH_MICROSOFT_OAUTH2_SECRET'),
    SOCIAL_AUTH_APPLE_ID_CLIENT: ecs.Secret.fromSecretsManager(secret, 'SOCIAL_AUTH_APPLE_ID_CLIENT'),
    SOCIAL_AUTH_APPLE_ID_TEAM: ecs.Secret.fromSecretsManager(secret, 'SOCIAL_AUTH_APPLE_ID_TEAM'),
    SOCIAL_AUTH_APPLE_ID_KEY: ecs.Secret.fromSecretsManager(secret, 'SOCIAL_AUTH_APPLE_ID_KEY'),
    SOCIAL_AUTH_APPLE_ID_SECRET: ecs.Secret.fromSecretsManager(secret, 'SOCIAL_AUTH_APPLE_ID_SECRET'),
    SOCIAL_AUTH_FACEBOOK_KEY: ecs.Secret.fromSecretsManager(secret, 'SOCIAL_AUTH_FACEBOOK_KEY'),
    SOCIAL_AUTH_FACEBOOK_SECRET: ecs.Secret.fromSecretsManager(secret, 'SOCIAL_AUTH_FACEBOOK_SECRET'),
  } as { [key: string]: ecs.Secret };

  if (accountStage === 'prod') {
    secrets['KLAVIYO_KEY'] = ecs.Secret.fromSecretsManager(secret, 'KLAVIYO_KEY');
    secrets['DD_DBM_PROPAGATION_MODE'] = ecs.Secret.fromSecretsManager(secret, 'DD_DBM_PROPAGATION_MODE');
    secrets['STRIPE_CREDITS_PRICE'] = ecs.Secret.fromSecretsManager(secret, 'STRIPE_CREDITS_PRICE');
    secrets['STRIPE_SUB_PRICE'] = ecs.Secret.fromSecretsManager(secret, 'STRIPE_SUB_PRICE');
    secrets['AWS_ACCESS_KEY_ID_ENV'] = ecs.Secret.fromSecretsManager(secret, 'AWS_ACCESS_KEY_ID');
    secrets['AWS_SECRET_ACCESS_KEY_ENV'] = ecs.Secret.fromSecretsManager(secret, 'AWS_SECRET_ACCESS_KEY');
    secrets['HOOK_COUNTER_BUFFER_VALKEY_URL'] = ecs.Secret.fromSecretsManager(secret, 'HOOK_COUNTER_BUFFER_VALKEY_URL');
  }
  if (accountStage === 'staging') {
    secrets['AWS_ACCESS_KEY_ID_ENV'] = ecs.Secret.fromSecretsManager(secret, 'AWS_ACCESS_KEY_ID_ENV');
    secrets['AWS_SECRET_ACCESS_KEY_ENV'] = ecs.Secret.fromSecretsManager(secret, 'AWS_SECRET_ACCESS_KEY_ENV');
  }

  return secrets;
};
