// config.ts

interface ContainerConfig {
  cpu: number;
  memory: number;
}

interface EnvironmentConfig {
  vpc: string;
  publicSubnets: string[];
  appSubnets: string[];
  lambdaSubnets: string[];
  dbSubnets: string[];
  cacheNodes: {
    [key: string]: string;
  };
  valkeyCacheNodes: {
    [key: string]: string;
  };
  memorydbCacheNodes: {
    [key: string]: string;
  };
  studioApiServiceConfig: {
    studioApiContainerConfig: ContainerConfig;
    dataDogContainerConfig: ContainerConfig;
    desiredCount: number;
    minCapacity: number;
    maxCapacity: number;
    terminationWaitTime: number;
  };
}

interface Config {
  [key: string]: EnvironmentConfig;
}

export const config: Config = {
  staging: {
    vpc: 'vpc-0067bffd53cab7197',
    publicSubnets: ['subnet-09bcf722409427295', 'subnet-06936a0bafd83c9c0', 'subnet-068b20276d3a9833a'],
    appSubnets: ['subnet-0b680dcafdc76cc4b', 'subnet-0c60320f2556bbd8c', 'subnet-0812dc5283e83ae8c'],
    lambdaSubnets: ['subnet-0dd6b22df1ed8487b', 'subnet-09843325aaf7a0556', 'subnet-04f8758f6e04e4318'],
    dbSubnets: ['subnet-05592a8c6f131dc64', 'subnet-028a13cbe42010a42', 'subnet-019bcc365083070a0'],
    cacheNodes: {
      default: 'cache.m7g.large',
    },
    valkeyCacheNodes: {
      default: 'cache.m7g.large',
    },
    memorydbCacheNodes: {
      default: 'db.r7g.large',
    },
    studioApiServiceConfig: {
      studioApiContainerConfig: {
        cpu: 8192,
        memory: 61440,
      },
      dataDogContainerConfig: {
        cpu: 1024,
        memory: 2048,
      },
      desiredCount: 5,
      minCapacity: 3,
      maxCapacity: 10,
      terminationWaitTime: 0, // in minutes
    },
  },
  prod: {
    vpc: 'vpc-071f804e8d60a0999',
    publicSubnets: ['subnet-0d1be9c3e380da635', 'subnet-0207ed800f561e94a', 'subnet-0a8d5097f1adf89b0'],
    appSubnets: ['subnet-0511fea8c0c8ef66e', 'subnet-0e1ad777ee6ce6e4f', 'subnet-0285649f124c9a146'],
    lambdaSubnets: ['subnet-09103ccbf4d81bf37', 'subnet-042b33b675f744004', 'subnet-0836956fd5d896955'],
    dbSubnets: ['subnet-00651449bbc8d2393', 'subnet-04c9820e2ad16bce4', 'subnet-05ed84086e74d3fe4'],
    cacheNodes: {
      default: 'cache.r7g.4xlarge',
    },
    valkeyCacheNodes: {
      'hook-listen-history': 'cache.r7g.4xlarge',
      'hook-counter-buffer': 'cache.r7g.4xlarge',
      default: 'cache.r7g.4xlarge',
      rl: 'cache.r7g.xlarge',
      clip: 'cache.r7g.2xlarge',
      'listen-history': 'cache.r7g.xlarge',
      session: 'cache.r7g.xlarge',
      comments: 'cache.r7g.xlarge',
      orpheus: 'cache.r7g.8xlarge',
      recommendation: 'cache.r7g.8xlarge',
      'personalized-prompts': 'cache.r7g.4xlarge'
    },
    memorydbCacheNodes: {
      default: 'db.r7g.8xlarge',
    },
    studioApiServiceConfig: {
      studioApiContainerConfig: {
        cpu: 8192,
        memory: 61440,
      },
      dataDogContainerConfig: {
        cpu: 1024,
        memory: 2048,
      },
      desiredCount: 150,
      minCapacity: 40,
      maxCapacity: 300,
      terminationWaitTime: 15, // in minutes
    },
  },
};
