from __future__ import annotations

import json
import sys
from pathlib import Path


ROOT_DIR = Path(__file__).resolve().parents[1]
OVERRIDE_PATH = ROOT_DIR / "scripts" / "data" / "plant_name_overrides.json"


CURATED_COMMON_NAMES: dict[str, dict[str, str]] = {
    "Monstera": {"ja": "モンステラ", "zh": "龟背竹"},
    "Pothos": {"ja": "ポトス", "zh": "绿萝"},
    "Cactus": {"ja": "サボテン", "zh": "仙人掌"},
    "Anthurium": {"ja": "アンスリウム", "zh": "花烛"},
    "Philodendron": {"zh": "喜林芋"},
    "Alocasia": {"ja": "アロカシア", "zh": "海芋"},
    "Peperomia": {"ja": "ペペロミア", "zh": "豆瓣绿"},
    "Begonia": {"zh": "秋海棠"},
    "Echeveria": {"ja": "エケベリア", "zh": "拟石莲花"},
    "Sedum": {"ja": "セダム", "zh": "景天"},
    "Haworthia": {"ja": "ハオルチア", "zh": "十二卷"},
    "Agave": {"ja": "アガベ", "zh": "龙舌兰"},
    "Calathea": {"ja": "カラテア", "zh": "肖竹芋"},
    "Dieffenbachia": {"ja": "ディフェンバキア", "zh": "花叶万年青"},
    "Aglaonema": {"ja": "アグラオネマ", "zh": "广东万年青"},
    "Geranium": {"ja": "ゼラニウム", "zh": "天竺葵"},
    "Cyclamen": {"ja": "シクラメン", "zh": "仙客来"},
    "Dendrobium": {"ja": "デンドロビウム", "zh": "石斛兰"},
    "Guzmania": {"ja": "グズマニア", "zh": "果子蔓"},
    "Aechmea": {"zh": "光萼荷"},
    "Hibiscus": {"ja": "ハイビスカス", "zh": "扶桑花"},
    "Gardenia": {"ja": "クチナシ", "zh": "栀子花"},
    "Camellia": {"ja": "ツバキ", "zh": "山茶花"},
    "Azalea": {"ja": "アザレア", "zh": "杜鹃花"},
    "Croton": {"ja": "クロトン", "zh": "变叶木"},
    "Coleus": {"zh": "彩叶草"},
    "Mandevilla": {"ja": "マンデビラ", "zh": "飘香藤"},
    "Petunia": {"ja": "ペチュニア", "zh": "矮牵牛"},
    "Freesia": {"ja": "フリージア", "zh": "香雪兰"},
    "Chrysanthemum": {"ja": "キク", "zh": "菊花"},
    "Gerbera": {"ja": "ガーベラ", "zh": "非洲菊"},
    "Torenia": {"ja": "トレニア", "zh": "夏堇"},
    "Lobelia": {"ja": "ロベリア", "zh": "半边莲"},
    "Iris": {"ja": "アイリス", "zh": "鸢尾"},
    "Primula": {"ja": "プリムラ", "zh": "报春花"},
    "Campanula": {"ja": "カンパニュラ", "zh": "风铃草"},
    "Delphinium": {"ja": "デルフィニウム", "zh": "飞燕草"},
    "Verbena": {"ja": "バーベナ", "zh": "马鞭草"},
    "Gazania": {"ja": "ガザニア", "zh": "勋章菊"},
    "Pelargonium": {"ja": "ペラルゴニウム", "zh": "天竺葵"},
    "Brachyscome": {"ja": "ブラキカム", "zh": "姬小菊"},
    "Diascia": {"ja": "ディアシア", "zh": "双距花"},
    "Nemesia": {"ja": "ネメシア", "zh": "香彩雀"},
    "Scabiosa": {"ja": "スカビオサ", "zh": "松虫草"},
    "Astilbe": {"ja": "アスチルベ", "zh": "落新妇"},
    "Hellebore": {"ja": "クリスマスローズ", "zh": "铁筷子"},
    "Lupine": {"ja": "ルピナス", "zh": "羽扇豆"},
    "Coneflower": {"ja": "エキナセア", "zh": "松果菊"},
    "Busy Lizzie": {"ja": "インパチェンス", "zh": "非洲凤仙"},
    "Columbine": {"ja": "オダマキ", "zh": "耧斗菜"},
    "Muscari": {"ja": "ムスカリ", "zh": "葡萄风信子"},
    "Rhipsalis": {"ja": "リプサリス", "zh": "丝苇"},
    "Tylecodon": {"ja": "チレコドン", "zh": "奇峰木"},
    "Pachypodium": {"ja": "パキポディウム", "zh": "棒锤树"},
    "Conophytum": {"ja": "コノフィツム", "zh": "肉锥花"},
    "Gasteria": {"ja": "ガステリア", "zh": "鲨鱼掌"},
    "Spider Plant": {"ja": "オリヅルラン", "zh": "吊兰"},
    "Selaginella": {"ja": "セラギネラ", "zh": "卷柏"},
    "String of Hearts": {"ja": "ハートカズラ", "zh": "爱之蔓"},
    "Buddha's Temple": {"ja": "ブッダズテンプル", "zh": "佛塔景天"},
    "Crown of Thorns": {"ja": "ハナキリン", "zh": "虎刺梅"},
    "Baseball Plant": {"ja": "ユーフォルビア・オベサ", "zh": "棒球大戟"},
    "String of Dolphins": {"ja": "イルカネックレス", "zh": "海豚吊兰"},
    "String of Bananas": {"ja": "バナナネックレス", "zh": "香蕉吊兰"},
    "Variegated String of Pearls": {"ja": "斑入りグリーンネックレス", "zh": "锦斑佛珠"},
    "String of Nickels": {"ja": "ストリングオブニッケルズ", "zh": "钱串吊兰"},
    "Watermelon Dischidia": {"ja": "スイカディスキディア", "zh": "西瓜吊兰"},
    "Hoya Krimson Queen": {"ja": "ホヤ・クリムゾンクイーン", "zh": "锦叶球兰"},
    "Syngonium Albo": {"zh": "白锦合果芋"},
    "Syngonium Pink Splash": {"zh": "粉斑合果芋"},
    "Caladium White Queen": {"ja": "カラジウム・ホワイトクイーン", "zh": "白皇后彩叶芋"},
    "Stromanthe Triostar": {"zh": "三色竹芋"},
    "Alocasia Frydek": {"ja": "アロカシア・フライデック", "zh": "黑绒海芋"},
    "Alocasia Amazonica": {"ja": "アロカシア・アマゾニカ"},
    "Dieffenbachia Camilla": {"zh": "卡米拉花叶万年青"},
    "Dracaena Song of India": {"zh": "印度之歌龙血树"},
    "Dracaena Compacta": {"zh": "密叶龙血树"},
    "Dracaena Lemon Lime": {"zh": "柠檬青龙血树"},
    "Vanilla Orchid": {"ja": "バニララン", "zh": "香草兰"},
    "Miltonia": {"zh": "堇兰"},
    "Oncidium Orchid": {"ja": "オンシジウム", "zh": "文心兰"},
    "Vanda Orchid": {"ja": "バンダ", "zh": "万代兰"},
    "Paphiopedilum": {"zh": "兜兰"},
    "Zygopetalum": {"ja": "ジゴペタラム", "zh": "轭瓣兰"},
    "Staghorn Fern": {"ja": "コウモリラン", "zh": "鹿角蕨"},
    "Perennial Baby's Breath": {"ja": "宿根カスミソウ", "zh": "宿根满天星"},
    "Florist's Cineraria": {"ja": "シネラリア", "zh": "瓜叶菊"},
    "Maidenhair Fern": {"ja": "アジアンタム", "zh": "铁线蕨"},
    "Cattleya": {"ja": "カトレア", "zh": "卡特兰"},
    "Cyclamen": {"ja": "シクラメン", "zh": "仙客来"},
    "Dracaena fragrans": {"ja": "幸福の木", "zh": "香龙血树"},
    "Camphora officinarum": {"ja": "クスノキ", "zh": "樟"},
    "Calluna vulgaris": {"ja": "カルーナ"},
    "Geranium sanguineum": {"ja": "ゲラニウム・サンギネウム"},
    "Lapsana communis": {"zh": "稻槎菜"},
    "Monstera adansonii": {"ja": "マドカズラ", "zh": "小龟背竹"},
}


def main() -> None:
    try:
        sys.stdout.reconfigure(encoding="utf-8")
    except Exception:
        pass

    payload = json.loads(OVERRIDE_PATH.read_text(encoding="utf-8"))
    updated = 0
    samples: list[dict[str, str]] = []

    for key, locales in CURATED_COMMON_NAMES.items():
        entry = payload.setdefault(key, {})
        changed = False
        for locale_key in ("ja", "zh"):
            value = locales.get(locale_key, "").strip()
            if not value:
                continue
            if entry.get(locale_key) != value:
                entry[locale_key] = value
                entry[f"{locale_key}_source"] = "manual_curated"
                changed = True
        if changed:
            updated += 1
        if len(samples) < 60:
            samples.append(
                {
                    "key": key,
                    "ja": entry.get("ja", ""),
                    "zh": entry.get("zh", ""),
                }
            )

    ordered = {name: payload[name] for name in sorted(payload)}
    OVERRIDE_PATH.write_text(json.dumps(ordered, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")

    print(
        json.dumps(
            {
                "updated": updated,
                "total_keys": len(CURATED_COMMON_NAMES),
                "sample": samples,
            },
            ensure_ascii=False,
            indent=2,
        )
    )


if __name__ == "__main__":
    main()
