import { Callback, Context } from '@pulumi/aws/lambda';
import { BucketEvent } from '@pulumi/aws/s3';
import * as Knex from 'knex';
const conversationsToPostgresFactory = (): Callback<BucketEvent, void> => {
  const knex = Knex({
    client: 'pg',
    connection: {
      host: process.env.DB_HOST,
      user: process.env.DB_USER,
      port: Number(process.env.DB_PORT),
      password: process.env.DB_PASS,
      database: process.env.DB_NAME,
    },
    useNullAsDefault: true,
  });
  return async function conversationsToPostgres(
    event: BucketEvent,
    context: Context
  ): Promise<void> {
    context.callbackWaitsForEmptyEventLoop = false;
    const records = [{}];
    return await knex.transaction(async (transaction) => {
      await transaction('conversations').insert(records);
    });
  };
};
const sendToPostgresLambda = new aws.lambda.CallbackFunction(
  'conversation-data-to-postgres',
  {
    timeout: 150,
    memorySize: 256,
    callbackFactory: conversationsToPostgres,
    runtime: aws.lambda.NodeJS12dXRuntime,
    environment: {
      variables: {
        DB_HOST: rds.address,
        DB_USER: rds.username,
        DB_PASS: password.result,
        DB_PORT: rds.port.apply((port) => port.toString()),
        DB_NAME: rds.name,
      },
    },
    vpcConfig: {
      securityGroupIds: rds.vpcSecurityGroupIds,
      subnetIds: vpc.publicSubnetIds,
    },
    deadLetterConfig: {
      targetArn: sendToPostgresDLQueue.arn,
    },
  }
);