/**
 * Run a sync job once, outside the scheduler — for the initial load, backfills and debugging.
 *   pnpm sync:once sync-reference | sync-products-full | sync-products-incremental | sync-inventory
 *   pnpm sync:once sku <SKU>
 */
import { runMigrations } from '@znet/catalog-db'
import { loadSyncEnv } from './config.js'
import { createSyncContext } from './context.js'
import { JOBS, syncProductSku, type JobName } from './jobs.js'

const [job, arg] = process.argv.slice(2)
const env = loadSyncEnv()
if (env.MIGRATE_ON_START) await runMigrations(env.DATABASE_URL)
const { ctx, close } = createSyncContext(env)

try {
  if (job === 'sku' && arg) {
    console.log(await syncProductSku(ctx, arg))
  } else if (job && job in JOBS) {
    console.log(await JOBS[job as JobName](ctx))
  } else {
    console.error(`usage: sync:once <${Object.keys(JOBS).join('|')}> | sku <SKU>`)
    process.exitCode = 2
  }
} finally {
  await close()
}
