import { DataSource } from 'typeorm';
import logger from '@zenvia/logger';

// eslint-disable-next-line import/no-mutable-exports
let connection: DataSource;

export const initPostgresDB = async (): Promise<DataSource> => {
  const host = process.env.PG_HOST;
  const port = Number(process.env.PG_PORT) || 5432;
  const username = process.env.PG_USERNAME;
  const password = process.env.PG_PASSWORD;
  const database = process.env.PG_DATABASE;

  logger.info(`Connecting to Postgres instance: [${host}:${port}] - in DB [${database}]`);

  connection = new DataSource({
    type: 'postgres',
    host,
    port,
    username,
    password,
    database,
    entities: [`${__dirname}/../entities/*{.js,.ts}`],
    synchronize: false,
    logging: process.env.PG_SHOW_LOGGING === 'true',
    migrationsRun: false,
  });

  await connection.initialize();

  logger.info('Connected to Postgres DB');

  return connection;
};

export const getPGConnection = (): DataSource => connection;
