/**
 * Buduje `data/manufacturer-verified-country.ts` z arkusza
 * `data/manufacturers-verification-filled.csv` (kolumna kraj_pewnosc: 4 lub 5).
 */
import { readFileSync, writeFileSync } from 'node:fs'
import { dirname, join } from 'node:path'
import { fileURLToPath } from 'node:url'

const __dirname = dirname(fileURLToPath(import.meta.url))
const csvPath = join(__dirname, '..', 'data', 'manufacturers-verification-filled.csv')
const outPath = join(__dirname, '..', 'data', 'manufacturer-verified-country.ts')

const text = readFileSync(csvPath, 'utf8')
const lines = text.split(/\r?\n/).filter((l) => l.trim())

const headerCols = lines[0].split(',')
if (headerCols[headerCols.length - 1]?.trim() !== 'kraj_pewnosc') {
  throw new Error(`Oczekiwano kolumny kraj_pewnosc na końcu nagłówka, jest: ${lines[0]}`)
}

const rec: Record<string, string> = {}
for (let i = 1; i < lines.length; i++) {
  const cols = lines[i].split(',')
  if (cols.length < 10) {
    console.warn('Pominięto wiersz (zła liczba kolumn):', lines[i])
    continue
  }
  const producer = cols[0]
  const iso = cols[1].trim().toUpperCase()
  const conf = parseInt(cols[cols.length - 1].trim(), 10)
  if (conf !== 4 && conf !== 5) continue
  if (!/^[A-Z]{2}$/.test(iso)) {
    console.warn('Pominięto (zły ISO):', producer, iso)
    continue
  }
  const prev = rec[producer]
  if (prev && prev !== iso) {
    console.warn('Konflikt nazwa/kraj — bierzę ostatni wiersz:', producer, prev, '→', iso)
  }
  rec[producer] = iso
}

const sortedKeys = Object.keys(rec).sort((a, b) => a.localeCompare(b, 'pl'))
const body = sortedKeys.map((k) => `  ${JSON.stringify(k)}: ${JSON.stringify(rec[k])},`).join('\n')

const output = `/**
 * Kraj macierzysty (ISO 3166-1 alpha-2) — wpisy z \`data/manufacturers-verification-filled.csv\`
 * dla \`kraj_pewnosc\` 4 lub 5 (pewność wysoka / bardzo wysoka).
 *
 * Nie edytuj ręcznie. Odśwież: \`npm run generate-verified-countries\`
 */
export const MANUFACTURER_VERIFIED_COUNTRY: Readonly<Record<string, string>> = {
${body}
}
`

writeFileSync(outPath, output, 'utf8')
console.log(`Zapisano ${sortedKeys.length} wpisów → ${outPath}`)
