import 'reflect-metadata';
import 'tsconfig-paths/register';

import { NestFactory } from '@nestjs/core';
import { AppModule } from '../apps/api/src/app.module';
import { runDefaultOrganizationMigration } from '../apps/api/src/modules/agency/organization/migration/0001_default-organization';
import { DrizzleService } from '../libs/drizzle/src';

/**
 * task-688 — 기업↔기업상품 1:N 전환을 위한 백필 마이그레이션 실행 진입점.
 *
 * 실행:
 *   - ts-node 사용 시: `ts-node -r tsconfig-paths/register scripts/run-task688-migration.ts`
 *   - 빌드 후 실행 시: nest build 산출물 경로에 맞춰 require 경로 조정 후 node 실행.
 *
 * 동작:
 *  1) NestJS 표준 부트스트랩으로 AppModule 컨텍스트 생성(HTTP 미바인딩).
 *  2) DrizzleService 인스턴스 획득 후 runDefaultOrganizationMigration 1회 호출.
 *  3) 결과 통계 출력 후 컨텍스트 종료.
 *
 * 멱등성:
 *  - 이미 매핑된 행은 다시 건드리지 않으므로 안전하게 재실행 가능.
 *  - NOT NULL ALTER DDL 은 본 스크립트 완료 후 별도 단계에서 수행 권장.
 */
async function main() {
  const app = await NestFactory.createApplicationContext(AppModule, {
    bufferLogs: false,
  });
  try {
    const drizzle = app.get(DrizzleService);
    const result = await runDefaultOrganizationMigration(drizzle);

    //* 운영 1회 실행을 가정한 결과 보고 — 콘솔 출력만으로 충분.
    console.log('[task-688] migration finished', result);
  } finally {
    await app.close();
  }
}

main().catch((error) => {
  console.error('[task-688] migration failed', error);
  process.exit(1);
});
