import { MigrationInterface, QueryRunner } from 'typeorm';

/**
 * Optional reporting line: each user may report to another user
 * in the same tenant (parent_user_id).
 */
export class UserParentUserId1786900000000 implements MigrationInterface {
  name = 'UserParentUserId1786900000000';

  public async up(qr: QueryRunner): Promise<void> {
    await qr.query(`
      ALTER TABLE "users"
        ADD COLUMN IF NOT EXISTS "parent_user_id" uuid
    `);
    await qr.query(`
      ALTER TABLE "users"
        ADD CONSTRAINT "FK_users_parent_user"
        FOREIGN KEY ("parent_user_id") REFERENCES "users"("id")
    `);
    await qr.query(`
      ALTER TABLE "users"
        ADD CONSTRAINT "CHK_users_parent_not_self"
        CHECK ("parent_user_id" IS NULL OR "parent_user_id" <> "id")
    `);
    await qr.query(`
      CREATE INDEX IF NOT EXISTS "ix_users_parent_user"
        ON "users" ("tenant_id", "parent_user_id")
        WHERE "is_deleted" = false
    `);
  }

  public async down(qr: QueryRunner): Promise<void> {
    await qr.query(`DROP INDEX IF EXISTS "ix_users_parent_user"`);
    await qr.query(`ALTER TABLE "users" DROP CONSTRAINT IF EXISTS "CHK_users_parent_not_self"`);
    await qr.query(`ALTER TABLE "users" DROP CONSTRAINT IF EXISTS "FK_users_parent_user"`);
    await qr.query(`ALTER TABLE "users" DROP COLUMN IF EXISTS "parent_user_id"`);
  }
}
