import { mkdir, writeFile } from "node:fs/promises"
import { dirname, resolve } from "node:path"

import { normalizeListing } from "../scraper/core/normalize"
import { MaritanoScraper } from "../scraper/sources/maritano"

const args = process.argv.slice(2)

const getFlagValue = (name: string) => {
  const direct = args.find((arg) => arg.startsWith(`${name}=`))

  if (direct) {
    return direct.slice(name.length + 1)
  }

  const index = args.indexOf(name)
  return index >= 0 ? args[index + 1] : undefined
}

const hasFlag = (name: string) => args.includes(name)

const limit = Number(getFlagValue("--limit"))
const output = getFlagValue("--output") ?? "outputs/maritano-full.json"
const includeDetails = !hasFlag("--no-details")
const detailConcurrency = Number(getFlagValue("--detail-concurrency") ?? "4")

async function main() {
  const scraper = new MaritanoScraper()
  const sample = await scraper.scrapeAll({
    limit: Number.isFinite(limit) ? limit : undefined,
    includeDetails,
    detailConcurrency: Number.isFinite(detailConcurrency) ? detailConcurrency : 4,
    onProgress: (message) => {
      console.error(`[maritano] ${message}`)
    }
  })

  const normalizedItems = sample.items.map(normalizeListing)
  const payload = {
    source: "MARITANO",
    scrapedAt: sample.scrapedAt,
    totalAvailable: sample.totalAvailable,
    count: normalizedItems.length,
    includeDetails,
    items: normalizedItems
  }

  const targetPath = resolve(output)
  await mkdir(dirname(targetPath), { recursive: true })
  await writeFile(targetPath, `${JSON.stringify(payload, null, 2)}\n`, "utf8")

  console.error(`[maritano] exportado a ${targetPath} (${normalizedItems.length} avisos)`)
}

main().catch((error) => {
  console.error(error)
  process.exit(1)
})
