import { type MigrationInterface, type QueryRunner } from 'typeorm';

/**
 * Floor pricing for activities — lowest sellable price per
 * (activity × ticket × age_group × currency × season).
 *
 * Mirrors the transport_pricing floor columns added in
 * 1777200000000-TransportFloorPrice. Same shape: 1 default + 5
 * positional season columns matching the existing default_price /
 * season_1..5_price selling matrix on activity_pricing.
 *
 * Quote/Booking saves will validate `unit_price` against the
 * resolved season's floor (helper lands in the next migration cycle
 * once the BE service hook is wired).
 *
 * All columns nullable — null means "no floor configured for this
 * season, allow any price." Symmetric to transport.
 */
export class ActivityFloorPrice1777600000000 implements MigrationInterface {
  public async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `ALTER TABLE activity_pricing ADD COLUMN IF NOT EXISTS floor_default_price  NUMERIC(12,2)`,
    );
    await queryRunner.query(
      `ALTER TABLE activity_pricing ADD COLUMN IF NOT EXISTS floor_season_1_price NUMERIC(12,2)`,
    );
    await queryRunner.query(
      `ALTER TABLE activity_pricing ADD COLUMN IF NOT EXISTS floor_season_2_price NUMERIC(12,2)`,
    );
    await queryRunner.query(
      `ALTER TABLE activity_pricing ADD COLUMN IF NOT EXISTS floor_season_3_price NUMERIC(12,2)`,
    );
    await queryRunner.query(
      `ALTER TABLE activity_pricing ADD COLUMN IF NOT EXISTS floor_season_4_price NUMERIC(12,2)`,
    );
    await queryRunner.query(
      `ALTER TABLE activity_pricing ADD COLUMN IF NOT EXISTS floor_season_5_price NUMERIC(12,2)`,
    );
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `ALTER TABLE activity_pricing DROP COLUMN IF EXISTS floor_season_5_price`,
    );
    await queryRunner.query(
      `ALTER TABLE activity_pricing DROP COLUMN IF EXISTS floor_season_4_price`,
    );
    await queryRunner.query(
      `ALTER TABLE activity_pricing DROP COLUMN IF EXISTS floor_season_3_price`,
    );
    await queryRunner.query(
      `ALTER TABLE activity_pricing DROP COLUMN IF EXISTS floor_season_2_price`,
    );
    await queryRunner.query(
      `ALTER TABLE activity_pricing DROP COLUMN IF EXISTS floor_season_1_price`,
    );
    await queryRunner.query(
      `ALTER TABLE activity_pricing DROP COLUMN IF EXISTS floor_default_price`,
    );
  }
}
