const fs = require('fs');

// Load accounts
const accounts = JSON.parse(fs.readFileSync('accounts.json', 'utf8'));

// Accounts to remove
const removeNumbers = [3220, 5120, 7140, 7280];

// Suggestions mapping by account number
const suggestionsMap = {
  // Variable omkostninger
  2000: ["varer", "indkøb", "lager", "goods", "inventory", "purchase", "varekøb"],
  2050: ["eu", "europa", "germany", "france", "italien", "spain", "netherlands", "eu-erhvervelse"],
  2100: ["eu", "europa", "ydelse", "service", "eu-ydelse"],
  2150: ["usa", "uk", "kina", "china", "verden", "import", "world"],
  2200: ["usa", "uk", "kina", "verden", "service", "ydelse", "world"],
  2250: ["fragt", "levering", "shipping", "delivery", "postnord", "gls", "dao", "bring", "ups", "dhl"],
  2300: ["fragt", "shipping", "delivery", "momsfri"],
  2350: ["fragt", "eu", "shipping", "dhl", "ups", "fedex"],
  2400: ["valuta", "kurs", "currency", "exchange"],
  2450: ["lager", "regulering", "inventory"],
  2800: ["underleverandør", "freelance", "contractor", "subcontractor", "fremmed arbejde"],

  // Lønomkostninger
  3000: ["løn", "salary", "wage", "payroll", "am-indkomst"],
  3020: ["atp", "arbejdsgiver"],
  3040: ["atp", "medarbejder"],
  3060: ["sygepenge", "sickness", "sygedag"],
  3070: ["personalegode", "fri telefon", "benefit", "goder"],
  3080: ["b-honorar", "honorar", "fee"],
  3090: ["barsel", "maternity", "fødsel"],
  3100: ["ferie", "feriepenge", "sh", "vacation", "holiday"],
  3120: ["pension", "pensionsbidrag", "retirement"],
  3140: ["diæt", "rejsegodtgørelse", "per diem", "allowance"],
  3160: ["kørsel", "kilometer", "km", "mileage", "km-godtgørelse", "bil"],
  3180: ["aer", "aes", "atp", "finansieringsbidrag"],
  3200: ["arbejdstøj", "uniform", "workwear", "tøj"],
  3240: ["mad", "kursus", "møde", "food", "catering", "frokost"],
  3260: ["gave", "personale", "gift", "employee"],
  3280: ["kursus", "uddannelse", "course", "training", "efteruddannelse"],
  3300: ["diverse", "personale", "ansatte", "moms"],
  3320: ["diverse", "personale", "ansatte", "momsfri"],
  3340: ["ferie", "regulering", "feriepenge"],
  3355: ["frokost", "frokostordning", "lunch", "kantine"],

  // Salgsomkostninger
  4000: ["annonce", "reklame", "marketing", "ads", "google", "facebook", "linkedin", "meta", "advertising"],
  4020: ["udsmykning", "event", "arrangement", "decoration"],
  4040: ["hotel", "overnatning", "accommodation", "booking.com", "hotels.com", "personale"],
  4060: ["hotel", "overnatning", "kunde", "client", "forretningsforbindelse"],
  4080: ["konference", "conference", "seminar", "event"],
  4100: ["messe", "fair", "exhibition", "udstilling"],
  4120: ["restaurant", "frokost", "middag", "lunch", "dinner", "café", "personale"],
  4140: ["restaurant", "repræsentation", "kunde", "client", "forretningsforbindelse"],
  4160: ["mad", "virksomhed", "forretningsforbindelse", "catering"],
  4180: ["gave", "blomster", "gift", "flowers", "repræsentation"],
  4200: ["repræsentation", "representation"],
  4220: ["repræsentation", "diverse"],
  4240: ["personale", "personnel", "staff"],
  4260: ["ikke-fradrag", "non-deductible"],
  4280: ["rejse", "travel", "tur", "trip"],

  // Lokaleomkostninger
  5000: ["husleje", "leje", "rent", "kontor", "lokale"],
  5010: ["husleje", "leje", "rent", "momsfri"],
  5025: ["el", "strøm", "electricity", "power", "ørsted", "norlys", "ewii", "andel"],
  5030: ["vand", "water", "vandværk"],
  5035: ["varme", "gas", "fjernvarme", "heating", "naturgas"],
  5040: ["elafgift", "afgift", "tax"],
  5045: ["gas", "afgift", "naturgas"],
  5050: ["vand", "afgift", "vandafgift"],
  5060: ["rengøring", "cleaning", "affald", "waste", "renovation"],
  5080: ["reparation", "vedligeholdelse", "maintenance", "repair"],
  5100: ["ejendomsskat", "property tax", "skat"],
  5140: ["mødelokale", "meeting room", "konference"],
  5160: ["dekoration", "decoration", "indretning"],

  // Kørsel og rejser
  6000: ["billeje", "car rental", "leje", "hertz", "avis", "europcar", "sixt", "enterprise"],
  6020: ["benzin", "diesel", "fuel", "brændstof", "ok", "shell", "q8", "circle k", "ingo"],
  6040: ["bil", "vedligeholdelse", "car", "service", "værksted", "dæk"],
  6060: ["vægtafgift", "forsikring", "car insurance", "bilforsikring"],
  6080: ["parkering", "parking", "p-afgift", "easypark", "parkman", "apcoa"],
  6085: ["parkering", "parking", "momsfri"],
  6100: ["bro", "bridge", "storebælt", "øresund", "toll", "afgift"],
  6120: ["taxa", "taxi", "uber", "bolt", "dantaxi", "viggo", "4x27"],
  6140: ["tog", "dsb", "train", "rejsekort", "billet"],
  6160: ["fly", "flight", "sas", "norwegian", "ryanair", "lufthansa", "flybillet"],
  6180: ["bus", "movia", "arriva", "flixbus"],
  6200: ["færge", "ferry", "molslinjen", "scandlines", "bornholmslinjen"],
  6400: ["transport", "diverse", "transportation"],

  // Administrationsomkostninger
  7005: ["revisor", "revision", "audit", "regnskab", "pwc", "deloitte", "ey", "kpmg", "bdo"],
  7010: ["advokat", "lawyer", "legal", "juridisk", "attorney"],
  7020: ["bogføring", "bookkeeping", "regnskab", "bogholder"],
  7040: ["konsulent", "consultant", "rådgivning", "advisory", "rådgiver"],
  7060: ["kontingent", "medlemskab", "membership", "forening"],
  7080: ["kontingent", "medlemskab", "momsfri"],
  7100: ["avis", "newspaper", "berlingske", "politiken", "jyllandsposten", "børsen", "dagblad"],
  7120: ["bog", "book", "litteratur", "amazon", "saxo", "tales", "faglitteratur"],
  7160: ["forsikring", "insurance", "tryg", "topdanmark", "if", "codan", "gjensidige", "alm brand"],
  7180: ["fragt", "kørsel", "shipping", "transport"],
  7200: ["kontor", "office", "papir", "printer", "lyreco", "staples", "kontorartikler"],
  7220: ["porto", "gebyr", "postage", "fee", "postnord"],
  7240: ["telefon", "mobil", "phone", "mobile", "telia", "telenor", "3", "telmore", "cbs", "lebara"],
  7260: ["telefon", "beskatning", "fri telefon"],
  7300: ["internet", "hosting", "domain", "web", "simply", "one.com", "cloudflare", "aws", "azure"],
  7320: ["software", "app", "abonnement", "subscription", "saas", "adobe", "microsoft", "slack", "notion", "google workspace", "dropbox"],
  7360: ["bøde", "gebyr", "fine", "offentlig"],
  7380: ["kasse", "difference", "cash"],
  7400: ["betaling", "payment", "stripe", "mobilepay", "nets", "clearhaus", "paypal"],
  7420: ["indløser", "acquirer", "nets", "clearhaus"],
  7440: ["licens", "license", "rettighed"],
  7460: ["diverse", "moms", "miscellaneous"],
  7480: ["diverse", "momsfri", "miscellaneous"],
  7500: ["generalforsamling", "bestyrelse", "møde", "board", "meeting"],
  7520: ["generalforsamling", "møde", "lokale"],
  7540: ["bestyrelse", "board", "møde", "lokale"],
  7560: ["bestyrelse", "board", "møde", "restaurant"],

  // Afskrivninger
  8040: ["computer", "laptop", "møbler", "furniture", "udstyr", "equipment", "apple", "dell", "lenovo", "småanskaffelse"],
  8050: ["småanskaffelse", "omvendt betalingspligt", "reverse charge"],

  // Renteudgifter
  9200: ["rente", "bank", "interest", "bankrenter"],
  9210: ["rente", "leverandør", "supplier", "interest"],
  9220: ["rente", "ikke-fradrag", "non-deductible"]
};

// VAT rubric mapping for EU accounts
const vatRubricMap = {
  2050: "EU_BOX_A_GOODS",
  2100: "EU_BOX_A_SERVICES",
  2350: "EU_BOX_A_GOODS"
};

// Region variants mapping
const regionVariants = {
  2000: { category: "varekøb", EU: 2050, WORLD: 2150 },
  2050: { category: "varekøb", DK: 2000, WORLD: 2150 },
  2150: { category: "varekøb", DK: 2000, EU: 2050 },
  2100: { category: "ydelseskøb", WORLD: 2200 },
  2200: { category: "ydelseskøb", EU: 2100 },
  2250: { category: "fragt", DK_VATFREE: 2300, EU: 2350 },
  2300: { category: "fragt", DK: 2250, EU: 2350 },
  2350: { category: "fragt", DK: 2250, DK_VATFREE: 2300 },
  5000: { category: "husleje", DK_VATFREE: 5010 },
  5010: { category: "husleje", DK: 5000 },
  6080: { category: "parkering", DK_VATFREE: 6085 },
  6085: { category: "parkering", DK: 6080 }
};

// Process accounts
const enrichedAccounts = accounts
  .filter(acc => !removeNumbers.includes(acc.number))
  .map(acc => {
    // Determine region
    let region = "DK";
    if (acc.defaultVatTypeRegion === "EU") {
      region = "EU";
    } else if (acc.defaultVatTypeRegion === "World") {
      region = "WORLD";
    }

    // Build enriched account
    const enriched = {
      id: acc.id,
      number: acc.number,
      name: acc.name,
      categoryName: acc.categoryName,
      defaultVatCode: acc.defaultVatCode,
      region: region,
      suggestions: suggestionsMap[acc.number] || []
    };

    // Add vatRubric for EU accounts
    if (vatRubricMap[acc.number]) {
      enriched.vatRubric = vatRubricMap[acc.number];
    }

    // Add related accounts for region variants
    if (regionVariants[acc.number]) {
      enriched.regionVariants = regionVariants[acc.number];
    }

    return enriched;
  });

// Save output
fs.writeFileSync(
  'accounts-with-suggestions.json',
  JSON.stringify(enrichedAccounts, null, 2),
  'utf8'
);

console.log(`Processed ${enrichedAccounts.length} accounts (removed ${removeNumbers.length})`);
console.log('Saved to accounts-with-suggestions.json');
