import { MigrationInterface, QueryRunner, TableForeignKey } from 'typeorm';

export class ReferenceMessageSentByToSlackUser1619437188610
  implements MigrationInterface {
  public async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `ALTER TABLE message ADD COLUMN slackSentById int DEFAULT NULL`
    );

    await queryRunner.createForeignKey(
      'message',
      new TableForeignKey({
        columnNames: ['slackSentById'],
        referencedColumnNames: ['id'],
        referencedTableName: 'slack_user',
      })
    );

    await queryRunner.query(
      `UPDATE message SET slackSentById=1 WHERE sentBy IS NOT NULL`
    );

    await queryRunner.query(`ALTER TABLE message DROP COLUMN sentBy`);
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    const table = await queryRunner.getTable('message');
    const foreignKey = table.foreignKeys.find((fk) =>
      fk.columnNames.includes('slackSentById')
    );
    await queryRunner.dropForeignKey('message', foreignKey);

    await queryRunner.query(
      `ALTER TABLE message ADD COLUMN sentBy varchar(255) DEFAULT NULL`
    );

    await queryRunner.query(
      `UPDATE message SET sentBy='Support' WHERE slackSentById IS NOT NULL`
    );

    await queryRunner.query(`ALTER TABLE message DROP COLUMN slackSentById`);
  }
}
