import { MigrationInterface, QueryRunner } from "typeorm";

/**
 * Support email as a second OTP channel alongside phone (e.g. signup lets the
 * user choose which one to verify). `phone` becomes nullable since an
 * email-channel row has none, and `email` is added as a nullable unique column
 * mirroring `phone`'s shape.
 */
export class AddEmailToOtpVerifications1900000000000
  implements MigrationInterface
{
  name = "AddEmailToOtpVerifications1900000000000";

  public async up(queryRunner: QueryRunner): Promise<void> {
    // The table lives in the `freight` schema (the OtpVerification entity pins
    // schema: "freight"). An earlier version of this migration targeted
    // `public.otp_verifications`, which does not exist there — leaving the real
    // freight table without an `email` column and OTP send failing with
    // `column OtpVerification.email does not exist`. Target `freight` explicitly.
    await queryRunner.query(`
      ALTER TABLE freight.otp_verifications
      ALTER COLUMN phone DROP NOT NULL
    `);
    await queryRunner.query(`
      ALTER TABLE freight.otp_verifications
      ADD COLUMN IF NOT EXISTS email varchar UNIQUE
    `);
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(`
      ALTER TABLE freight.otp_verifications
      DROP COLUMN IF EXISTS email
    `);
    await queryRunner.query(`
      ALTER TABLE freight.otp_verifications
      ALTER COLUMN phone SET NOT NULL
    `);
  }
}
