"""Build static/js/mmsi_mid_iso2.json from Wikipedia MID table (embedded). Run: python tools/build_mmsi_mid_json.py"""
import json
import re

# Fragment of https://en.wikipedia.org/wiki/Maritime_identification_digits (action=raw), table rows only
WIKI_TABLE = r"""
| [Russian Federation](https://en.wikipedia.org/wiki/Russia) | 273 |
| [Latvia](https://en.wikipedia.org/wiki/Latvia)(Republic of) | 275 |
| [Lithuania](https://en.wikipedia.org/wiki/Lithuania)(Republic of) | 277 |
| [Estonia](https://en.wikipedia.org/wiki/Estonia)(Republic of) | 276 |
| [Ukraine](https://en.wikipedia.org/wiki/Ukraine) | 272 |
| [Poland](https://en.wikipedia.org/wiki/Poland)(Republic of) | 261 |
| [Germany](https://en.wikipedia.org/wiki/Germany)(Federal Republic of) | 211; 218 |
| [France](https://en.wikipedia.org/wiki/France) | 226; 227; 228 |
| [Italy](https://en.wikipedia.org/wiki/Italy) | 247 |
| [Norway](https://en.wikipedia.org/wiki/Norway) | 257; 258; 259 |
| [Sweden](https://en.wikipedia.org/wiki/Sweden) | 265; 266 |
| [Finland](https://en.wikipedia.org/wiki/Finland) | 230 |
| [Denmark](https://en.wikipedia.org/wiki/Denmark) | 219; 220 |
| [Netherlands](https://en.wikipedia.org/wiki/Netherlands)(Kingdom of the) | 244; 245; 246 |
| [Belgium](https://en.wikipedia.org/wiki/Belgium) | 205 |
| [Spain](https://en.wikipedia.org/wiki/Spain) | 224; 225 |
| [Greece](https://en.wikipedia.org/wiki/Greece) | 237; 239; 240; 241 |
| [Turkey](https://en.wikipedia.org/wiki/Turkey) | 271 |
| [Romania](https://en.wikipedia.org/wiki/Romania) | 264 |
| [Bulgaria](https://en.wikipedia.org/wiki/Bulgaria)(Republic of) | 207 |
| [Croatia](https://en.wikipedia.org/wiki/Croatia)(Republic of) | 238 |
| [United Kingdom of Great Britain and Northern Ireland](https://en.wikipedia.org/wiki/United_Kingdom) | 232; 233; 234; 235 |
| [Ireland](https://en.wikipedia.org/wiki/Republic_of_Ireland) | 250 |
| [Iceland](https://en.wikipedia.org/wiki/Iceland) | 251 |
| [Malta](https://en.wikipedia.org/wiki/Malta) | 215; 229; 248; 249; 256 |
| [Cyprus](https://en.wikipedia.org/wiki/Cyprus)(Republic of) | 209; 210; 212 |
| [United States of America](https://en.wikipedia.org/wiki/United_States) | 338; 366; 367; 368; 369 |
| [Canada](https://en.wikipedia.org/wiki/Canada) | 316 |
| [China](https://en.wikipedia.org/wiki/China)(People's Republic of) | 412; 413; 414 |
| [Japan](https://en.wikipedia.org/wiki/Japan) | 431; 432 |
| [Korea](https://en.wikipedia.org/wiki/South_Korea)(Republic of) | 440; 441 |
| [Singapore](https://en.wikipedia.org/wiki/Singapore)(Republic of) | 563; 564; 565; 566 |
| [India](https://en.wikipedia.org/wiki/India)(Republic of) | 419 |
| [Australia](https://en.wikipedia.org/wiki/Australia) | 503 |
| [Brazil](https://en.wikipedia.org/wiki/Brazil)(Federative Republic of) | 710 |
| [Argentina](https://en.wikipedia.org/wiki/Argentina) | 701 |
| [Panama](https://en.wikipedia.org/wiki/Panama)(Republic of) | 351; 352; 353; 354; 355; 356; 357; 370; 371; 372; 373; 374 |
| [Liberia](https://en.wikipedia.org/wiki/Liberia)(Republic of) | 636; 637 |
| [Marshall Islands](https://en.wikipedia.org/wiki/Marshall_Islands)(Republic of the) | 538 |
| [Bahamas](https://en.wikipedia.org/wiki/The_Bahamas)(Commonwealth of the) | 308; 309; 311 |
| [Hong Kong](https://en.wikipedia.org/wiki/Hong_Kong)(Special Administrative Region of China) | 477 |
| [Taiwan](https://en.wikipedia.org/wiki/Taiwan)(Republic of China) | 416 |
| [Vietnam](https://en.wikipedia.org/wiki/Vietnam)(Socialist Republic of) | 574 |
| [Indonesia](https://en.wikipedia.org/wiki/Indonesia)(Republic of) | 525 |
| [Malaysia](https://en.wikipedia.org/wiki/Malaysia) | 533 |
| [Philippines](https://en.wikipedia.org/wiki/Philippines)(Republic of the) | 548 |
| [Thailand](https://en.wikipedia.org/wiki/Thailand) | 567 |
| [Saudi Arabia](https://en.wikipedia.org/wiki/Saudi_Arabia)(Kingdom of) | 403 |
| [United Arab Emirates](https://en.wikipedia.org/wiki/United_Arab_Emirates) | 470; 471 |
| [Israel](https://en.wikipedia.org/wiki/Israel)(State of) | 428 |
| [Egypt](https://en.wikipedia.org/wiki/Egypt)(Arab Republic of) | 622 |
| [South Africa](https://en.wikipedia.org/wiki/South_Africa)(Republic of) | 601 |
| [New Zealand](https://en.wikipedia.org/wiki/New_Zealand) | 512 |
| [Mexico](https://en.wikipedia.org/wiki/Mexico) | 345 |
| [Chile](https://en.wikipedia.org/wiki/Chile) | 725 |
| [Portugal](https://en.wikipedia.org/wiki/Portugal) | 263 |
| [Switzerland](https://en.wikipedia.org/wiki/Switzerland)(Confederation of) | 269 |
| [Austria](https://en.wikipedia.org/wiki/Austria) | 203 |
| [Czech Republic](https://en.wikipedia.org/wiki/Czech_Republic) | 270 |
| [Hungary](https://en.wikipedia.org/wiki/Hungary)(Republic of) | 243 |
| [Serbia](https://en.wikipedia.org/wiki/Serbia) | 279 |
| [Slovenia](https://en.wikipedia.org/wiki/Slovenia)(Republic of) | 278 |
| [Slovakia](https://en.wikipedia.org/wiki/Slovakia) | 267 |
| [Montenegro](https://en.wikipedia.org/wiki/Montenegro)(Republic of) | 262 |
| [Albania](https://en.wikipedia.org/wiki/Albania)(Republic of) | 201 |
| [Georgia](https://en.wikipedia.org/wiki/Georgia_(country)) | 213 |
| [Kazakhstan](https://en.wikipedia.org/wiki/Kazakhstan)(Republic of) | 436 |
| [Iran](https://en.wikipedia.org/wiki/Iran)(Islamic Republic of) | 422 |
"""

NAME_TO_ISO2 = {
    "Russian Federation": "RU",
    "Latvia": "LV",
    "Lithuania": "LT",
    "Estonia": "EE",
    "Ukraine": "UA",
    "Poland": "PL",
    "Germany": "DE",
    "France": "FR",
    "Italy": "IT",
    "Norway": "NO",
    "Sweden": "SE",
    "Finland": "FI",
    "Denmark": "DK",
    "Netherlands": "NL",
    "Belgium": "BE",
    "Spain": "ES",
    "Greece": "GR",
    "Turkey": "TR",
    "Romania": "RO",
    "Bulgaria": "BG",
    "Croatia": "HR",
    "United Kingdom of Great Britain and Northern Ireland": "GB",
    "Ireland": "IE",
    "Iceland": "IS",
    "Malta": "MT",
    "Cyprus": "CY",
    "United States of America": "US",
    "Canada": "CA",
    "China": "CN",
    "Japan": "JP",
    "Korea": "KR",
    "Singapore": "SG",
    "India": "IN",
    "Australia": "AU",
    "Brazil": "BR",
    "Argentina": "AR",
    "Panama": "PA",
    "Liberia": "LR",
    "Marshall Islands": "MH",
    "Bahamas": "BS",
    "Hong Kong": "HK",
    "Taiwan": "TW",
    "Vietnam": "VN",
    "Indonesia": "ID",
    "Malaysia": "MY",
    "Philippines": "PH",
    "Thailand": "TH",
    "Saudi Arabia": "SA",
    "United Arab Emirates": "AE",
    "Israel": "IL",
    "Egypt": "EG",
    "South Africa": "ZA",
    "New Zealand": "NZ",
    "Mexico": "MX",
    "Chile": "CL",
    "Portugal": "PT",
    "Switzerland": "CH",
    "Austria": "AT",
    "Czech Republic": "CZ",
    "Hungary": "HU",
    "Serbia": "RS",
    "Slovenia": "SI",
    "Slovakia": "SK",
    "Montenegro": "ME",
    "Albania": "AL",
    "Georgia": "GE",
    "Kazakhstan": "KZ",
    "Iran": "IR",
}


def main():
    pat = re.compile(r"\| \[([^\]]+)\]\([^\)]+\)[^\|]*\| ([0-9][^|\n]*) \|")
    mid_to_iso = {}
    for m in pat.finditer(WIKI_TABLE):
        name = m.group(1).strip()
        codes_cell = m.group(2)
        codes = [
            x.strip()
            for x in codes_cell.replace(";", " ").split()
            if x.strip().isdigit() and len(x.strip()) == 3
        ]
        iso = NAME_TO_ISO2.get(name)
        if not iso:
            raise SystemExit(f"Missing ISO2 for country: {name!r}")
        for mid in codes:
            mid_to_iso[mid] = iso
    from pathlib import Path
    root = Path(__file__).resolve().parent.parent
    out = root / "static" / "js" / "mmsi_mid_iso2.json"
    with open(out, "w", encoding="utf-8") as f:
        json.dump(mid_to_iso, f, separators=(",", ":"))
    print("Wrote", out, len(mid_to_iso), "MIDs")


if __name__ == "__main__":
    main()
