import { MigrationInterface, QueryRunner } from 'typeorm';

/**
 * Private PAN card filename on bookings, plus driver-received stamp
 * on Movement Dashboard cash collections (route + time; booking_id
 * already lives on the row).
 */
export class BookingPanAndDriverReceived1786600000000 implements MigrationInterface {
  name = 'BookingPanAndDriverReceived1786600000000';

  public async up(qr: QueryRunner): Promise<void> {
    await qr.query(`
      ALTER TABLE "bookings"
        ADD COLUMN IF NOT EXISTS "pan_card_filename" varchar(255)
    `);
    await qr.query(`
      ALTER TABLE "booking_cash_collections"
        ADD COLUMN IF NOT EXISTS "driver_received_at" timestamptz,
        ADD COLUMN IF NOT EXISTS "driver_received_route_kind" varchar(20),
        ADD COLUMN IF NOT EXISTS "driver_received_route_item_id" uuid
    `);
    await qr.query(`
      ALTER TABLE "booking_cash_collections"
        DROP CONSTRAINT IF EXISTS "chk_bcc_driver_received_route_kind"
    `);
    await qr.query(`
      ALTER TABLE "booking_cash_collections"
        ADD CONSTRAINT "chk_bcc_driver_received_route_kind"
        CHECK (
          "driver_received_route_kind" IS NULL
          OR "driver_received_route_kind" IN ('TRANSPORT','ACTIVITY','SPECIAL')
        )
    `);
  }

  public async down(qr: QueryRunner): Promise<void> {
    await qr.query(`
      ALTER TABLE "booking_cash_collections"
        DROP CONSTRAINT IF EXISTS "chk_bcc_driver_received_route_kind"
    `);
    await qr.query(`
      ALTER TABLE "booking_cash_collections"
        DROP COLUMN IF EXISTS "driver_received_route_item_id",
        DROP COLUMN IF EXISTS "driver_received_route_kind",
        DROP COLUMN IF EXISTS "driver_received_at"
    `);
    await qr.query(`
      ALTER TABLE "bookings"
        DROP COLUMN IF EXISTS "pan_card_filename"
    `);
  }
}
