import re
import json

with open("001 마인크래프트_조합법_대백과.md", "r", encoding="utf-8") as f:
    text = f.read()

categories = [
    {"id": "tools", "title": "도구 및 채굴", "code": "4.1", "icon": "⛏️"},
    {"id": "combat", "title": "전투 및 방어구", "code": "4.2", "icon": "⚔️"},
    {"id": "building", "title": "건축 블록", "code": "4.3", "icon": "🧱"},
    {"id": "decoration", "title": "장식 및 주민 직업 블록", "code": "4.4", "icon": "🏮"},
    {"id": "redstone", "title": "레드스톤 및 기계", "code": "4.5", "icon": "⚙️"},
    {"id": "transport", "title": "운송 수단", "code": "4.6", "icon": "🛶"},
    {"id": "food", "title": "식료품 및 요리", "code": "4.7", "icon": "🍞"},
    {"id": "utility", "title": "유틸리티 및 특수 기능", "code": "4.8", "icon": "🧭"},
    {"id": "brewing", "title": "양조 및 마법", "code": "4.9", "icon": "🧪"},
    {"id": "materials", "title": "재료, 원자재 & 염료", "code": "4.10", "icon": "💎"},
    {"id": "misc", "title": "기타 잡화", "code": "4.11", "icon": "🎆"},
]

# High quality authentic Minecraft Wiki sprite icons dictionary
item_icons = {
    # Tools
    "곡괭이 (Pickaxe)": "https://minecraft.wiki/images/Diamond_Pickaxe_JE3_BE3.png?7409d",
    "도끼 (Axe)": "https://minecraft.wiki/images/Diamond_Axe_JE2_BE2.png",
    "삽 (Shovel)": "https://minecraft.wiki/images/Diamond_Shovel_JE2_BE2.png",
    "괭이 (Hoe)": "https://minecraft.wiki/images/Diamond_Hoe_JE2_BE2.png",
    "낚싯대 (Fishing Rod)": "https://minecraft.wiki/images/Fishing_Rod_JE2_BE2.png",
    "당근 낚싯대": "https://minecraft.wiki/images/Carrot_on_a_Stick_JE2_BE2.png",
    "뒤틀린 균 낚싯대": "https://minecraft.wiki/images/Warped_Fungus_on_a_Stick_JE1_BE1.png",
    "가위 (Shears)": "https://minecraft.wiki/images/Shears_JE2_BE2.png",
    "부싯돌과 부싯돌 (라이터)": "https://minecraft.wiki/images/Flint_and_Steel_JE4_BE2.png",
    "양동이 (Bucket)": "https://minecraft.wiki/images/Bucket_JE2_BE2.png",
    "붓 (Brush)": "https://minecraft.wiki/images/Brush_JE2_BE2.png",
    "끈 (Lead)": "https://minecraft.wiki/images/Lead_JE2_BE2.png",
    "망원경 (Spyglass)": "https://minecraft.wiki/images/Spyglass_JE2_BE2.png",
    # Combat
    "검 (Sword)": "https://minecraft.wiki/images/Diamond_Sword_JE2_BE2.png",
    "방패 (Shield)": "https://minecraft.wiki/images/Shield_JE2_BE1.png?4837d",
    "활 (Bow)": "https://minecraft.wiki/images/Bow_JE2_BE1.png?c428a",
    "쇠뇌 (Crossbow)": "https://minecraft.wiki/images/Crossbow_JE2_BE1.png",
    "화살 (Arrow)": "https://minecraft.wiki/images/Arrow_JE2_BE2.png",
    "분광 화살 (Spectral Arrow)": "https://minecraft.wiki/images/Spectral_Arrow_JE2_BE2.png",
    "철퇴 (Mace)": "https://minecraft.wiki/images/Mace_JE1_BE1.png",
    "투구 (Helmet)": "https://minecraft.wiki/images/Diamond_Helmet_JE2_BE2.png",
    "흉갑 (Chestplate)": "https://minecraft.wiki/images/Diamond_Chestplate_JE2_BE2.png",
    "레깅스 (Leggings)": "https://minecraft.wiki/images/Diamond_Leggings_JE2_BE2.png",
    "부츠 (Boots)": "https://minecraft.wiki/images/Diamond_Boots_JE2_BE2.png",
    "거북 등딱지 (Turtle Helmet)": "https://minecraft.wiki/images/Turtle_Shell_JE2_BE2.png",
    "가죽 말 갑옷": "https://minecraft.wiki/images/Leather_Horse_Armor_JE2_BE2.png",
    # Building
    "목재 판자 (Planks)": "https://minecraft.wiki/images/Oak_Planks.png",
    "막대기 (Stick)": "https://minecraft.wiki/images/Stick_JE2_BE2.png",
    "나무 문 (Wooden Door)": "https://minecraft.wiki/images/Oak_Door_JE3_BE2.png",
    "철문 (Iron Door)": "https://minecraft.wiki/images/Iron_Door_JE2_BE2.png",
    "다락문 (Trapdoor)": "https://minecraft.wiki/images/Oak_Trapdoor.png",
    "철 다락문 (Iron Trapdoor)": "https://minecraft.wiki/images/Iron_Trapdoor.png",
    "계단 (Stairs)": "https://minecraft.wiki/images/Oak_Stairs.png",
    "반 블록 (Slab)": "https://minecraft.wiki/images/Oak_Slab.png",
    "울타리 (Fence)": "https://minecraft.wiki/images/Oak_Fence.png",
    "울타리 문 (Fence Gate)": "https://minecraft.wiki/images/Oak_Fence_Gate.png",
    "담장 (Wall)": "https://minecraft.wiki/images/Cobblestone_Wall.png",
    "석재 벽돌 (Stone Bricks)": "https://minecraft.wiki/images/Stone_Bricks.png",
    "점토 벽돌 블록 (Bricks)": "https://minecraft.wiki/images/Bricks.png",
    "석영 블록 (Quartz Block)": "https://minecraft.wiki/images/Block_of_Quartz.png",
    "프리즈머린 (Prismarine)": "https://minecraft.wiki/images/Prismarine.png",
    "프리즈머린 벽돌": "https://minecraft.wiki/images/Prismarine_Bricks.png",
    "바다 랜턴 (Sea Lantern)": "https://minecraft.wiki/images/Sea_Lantern.png",
    "구리 블록 (Copper Block)": "https://minecraft.wiki/images/Block_of_Copper.png",
    "깎인 구리 (Cut Copper)": "https://minecraft.wiki/images/Cut_Copper.png",
    "구리 문 (Copper Door)": "https://minecraft.wiki/images/Copper_Door_JE1_BE1.png",
    "구리 다락문": "https://minecraft.wiki/images/Copper_Trapdoor_JE1_BE1.png",
    "구리 격자 (Copper Grate)": "https://minecraft.wiki/images/Copper_Grate_JE1_BE1.png",
    "유리판 (Glass Pane)": "https://minecraft.wiki/images/Glass_Pane_JE2.png",
    "철창 (Iron Bars)": "https://minecraft.wiki/images/Iron_Bars_JE2_BE2.png",
    # Decoration & Workstations
    "횃불 (Torch)": "https://minecraft.wiki/images/Torch_JE4_BE2.png",
    "영혼 횃불 (Soul Torch)": "https://minecraft.wiki/images/Soul_Torch_JE2_BE2.png",
    "랜턴 (Lantern)": "https://minecraft.wiki/images/Lantern_JE1_BE1.png",
    "영혼 랜턴 (Soul Lantern)": "https://minecraft.wiki/images/Soul_Lantern_JE1_BE1.png",
    "모닥불 (Campfire)": "https://minecraft.wiki/images/Campfire_JE2_BE1.png",
    "양초 (Candle)": "https://minecraft.wiki/images/Candle_JE2_BE1.png",
    "침대 (Bed)": "https://minecraft.wiki/images/Red_Bed_JE3_BE2.png",
    "상자 (Chest)": "https://minecraft.wiki/images/Chest_%28S%29_JE2_BE2.png?6b608",
    "덫 상자 (Trapped Chest)": "https://minecraft.wiki/images/Trapped_Chest_%28S%29_JE2_BE2.png",
    "통 (Barrel)": "https://minecraft.wiki/images/Barrel.png",
    "화로 (Furnace)": "https://minecraft.wiki/images/Furnace.png",
    "용광로 (Blast Furnace)": "https://minecraft.wiki/images/Blast_Furnace.png",
    "훈연기 (Smoker)": "https://minecraft.wiki/images/Smoker.png",
    "석재 절단기 (Stonecutter)": "https://minecraft.wiki/images/Stonecutter.png",
    "숫돌 (Grindstone)": "https://minecraft.wiki/images/Grindstone.png",
    "대장장이 작업대 (Smithing Table)": "https://minecraft.wiki/images/Smithing_Table.png",
    "직조기 (Loom)": "https://minecraft.wiki/images/Loom.png",
    "지도 제작대 (Cartography Table)": "https://minecraft.wiki/images/Cartography_Table.png",
    "화살 제작대 (Fletching Table)": "https://minecraft.wiki/images/Fletching_Table.png",
    "컴포스터 (Composter)": "https://minecraft.wiki/images/Composter.png",
    "독서대 (Lectern)": "https://minecraft.wiki/images/Lectern.png",
    "모루 (Anvil)": "https://minecraft.wiki/images/Anvil_%28N%29_JE3.png?d438e",
    "조각된 책장 (Chiseled Bookshelf)": "https://minecraft.wiki/images/Chiseled_Bookshelf.png",
    "그림 (Painting)": "https://minecraft.wiki/images/Painting_JE2_BE2.png",
    "꽃병 (Flower Pot)": "https://minecraft.wiki/images/Flower_Pot_JE2_BE2.png",
    # Redstone
    "피스톤 (Piston)": "https://minecraft.wiki/images/Piston_%28U%29_JE4.png?378db",
    "끈끈이 피스톤 (Sticky Piston)": "https://minecraft.wiki/images/Sticky_Piston_%28U%29_JE4.png",
    "호퍼 (Hopper)": "https://minecraft.wiki/images/Hopper_%28D%29_JE8.png?331f6",
    "관찰자 (Observer)": "https://minecraft.wiki/images/Observer_JE4_BE3.png?39c33",
    "발사기 (Dispenser)": "https://minecraft.wiki/images/Dispenser.png",
    "공급기 (Dropper)": "https://minecraft.wiki/images/Dropper.png",
    "레드스톤 중계기 (Repeater)": "https://minecraft.wiki/images/Redstone_Repeater_%28item%29_JE3_BE2.png",
    "레드스톤 비교기 (Comparator)": "https://minecraft.wiki/images/Redstone_Comparator_%28item%29_JE3_BE2.png",
    "크래프터 (Crafter)": "https://minecraft.wiki/images/Crafter_JE4_BE3.png?3996e",
    "햇빛 감지기 (Daylight Detector)": "https://minecraft.wiki/images/Daylight_Detector.png",
    "과녁 (Target Block)": "https://minecraft.wiki/images/Target.png",
    "TNT": "https://minecraft.wiki/images/TNT.png",
    "레버 (Lever)": "https://minecraft.wiki/images/Lever_JE4_BE2.png",
    "버튼 (Button)": "https://minecraft.wiki/images/Stone_Button_JE3_BE2.png",
    "압력판 (Pressure Plate)": "https://minecraft.wiki/images/Stone_Pressure_Plate.png",
    "무게 압력판 (경압/중압)": "https://minecraft.wiki/images/Heavy_Weighted_Pressure_Plate.png",
    "피뢰침 (Lightning Rod)": "https://minecraft.wiki/images/Lightning_Rod_JE2_BE2.png",
    "소리 블록 (Note Block)": "https://minecraft.wiki/images/Note_Block.png",
    "음반 재생기 (Jukebox)": "https://minecraft.wiki/images/Jukebox.png",
    # Transport
    "보트 (Boat)": "https://minecraft.wiki/images/Oak_Boat_JE4_BE2.png?114d6",
    "상자 보트 (Boat with Chest)": "https://minecraft.wiki/images/Oak_Boat_with_Chest_JE2_BE2.png",
    "마인카트 (Minecart)": "https://minecraft.wiki/images/Minecart_JE4_BE2.png?92161",
    "상자 마인카트": "https://minecraft.wiki/images/Minecart_with_Chest_JE4_BE2.png",
    "호퍼 마인카트": "https://minecraft.wiki/images/Minecart_with_Hopper_JE3_BE2.png",
    "화로 마인카트": "https://minecraft.wiki/images/Minecart_with_Furnace_JE3_BE2.png",
    "TNT 마인카트": "https://minecraft.wiki/images/Minecart_with_TNT_JE3_BE2.png",
    "일반 레일 (Rail)": "https://minecraft.wiki/images/Rail.png",
    "파워 레일 (Powered Rail)": "https://minecraft.wiki/images/Powered_Rail.png",
    "감지 레일 (Detector Rail)": "https://minecraft.wiki/images/Detector_Rail.png",
    "활성화 레일 (Activator Rail)": "https://minecraft.wiki/images/Activator_Rail.png",
    # Food
    "빵 (Bread)": "https://minecraft.wiki/images/Bread_JE3_BE3.png",
    "황금 사과 (Golden Apple)": "https://minecraft.wiki/images/Golden_Apple_JE2_BE2.png?aa827",
    "황금 당근 (Golden Carrot)": "https://minecraft.wiki/images/Golden_Carrot_JE4_BE2.png",
    "케이크 (Cake)": "https://minecraft.wiki/images/Cake_JE4.png",
    "호박 파이 (Pumpkin Pie)": "https://minecraft.wiki/images/Pumpkin_Pie_JE2_BE2.png",
    "쿠키 (Cookie)": "https://minecraft.wiki/images/Cookie_JE2_BE2.png",
    "토끼 스튜 (Rabbit Stew)": "https://minecraft.wiki/images/Rabbit_Stew_JE3_BE2.png",
    "버섯 스튜 (Mushroom Stew)": "https://minecraft.wiki/images/Mushroom_Stew_JE2_BE2.png",
    "비트 스튜 (Beetroot Soup)": "https://minecraft.wiki/images/Beetroot_Soup_JE2_BE2.png",
    "수상한 스튜 (Suspicious Stew)": "https://minecraft.wiki/images/Suspicious_Stew_JE2_BE2.png",
    "꿀 블록 (Honey Block)": "https://minecraft.wiki/images/Honey_Block.png",
    "벌집 블록 (Honeycomb Block)": "https://minecraft.wiki/images/Honeycomb_Block.png",
    # Utility
    "나침반 (Compass)": "https://minecraft.wiki/images/Compass_JE2_BE2.png?e2169",
    "시계 (Clock)": "https://minecraft.wiki/images/Clock_JE3_BE3.png",
    "빈 지도 (Empty Map)": "https://minecraft.wiki/images/Map_%28item%29_JE2_BE2.png",
    "엔더의 눈 (Eye of Ender)": "https://minecraft.wiki/images/Eye_of_Ender_JE2_BE2.png",
    "엔더 상자 (Ender Chest)": "https://minecraft.wiki/images/Ender_Chest.png?b0011",
    "자석석 (Lodestone)": "https://minecraft.wiki/images/Lodestone.png",
    "발광 액자 (Glow Item Frame)": "https://minecraft.wiki/images/Glow_Item_Frame_%28item%29_JE1_BE1.png",
    "회복 나침반 (Recovery Compass)": "https://minecraft.wiki/images/Recovery_Compass_JE1_BE1.png",
    "신호기 (Beacon)": "https://minecraft.wiki/images/Beacon.png",
    "전달체 (Conduit)": "https://minecraft.wiki/images/Conduit.png",
    "셜커 상자 (Shulker Box)": "https://minecraft.wiki/images/Shulker_Box.png",
    "리스폰 정박기 (Respawn Anchor)": "https://minecraft.wiki/images/Respawn_Anchor.png",
    # Brewing & Magic
    "양조기 (Brewing Stand)": "https://minecraft.wiki/images/Brewing_Stand_%28empty%29_JE10.png?58d74",
    "가마솥 (Cauldron)": "https://minecraft.wiki/images/Cauldron_JE8.png",
    "유리병 (Glass Bottle)": "https://minecraft.wiki/images/Glass_Bottle_JE2_BE2.png",
    "마법부여대 (Enchanting Table)": "https://minecraft.wiki/images/Enchanting_Table_JE4_BE2.png?7a922",
    "책장 (Bookshelf)": "https://minecraft.wiki/images/Bookshelf.png",
    "블레이즈 가루 (Blaze Powder)": "https://minecraft.wiki/images/Blaze_Powder_JE2_BE2.png",
    "마그마 크림 (Magma Cream)": "https://minecraft.wiki/images/Magma_Cream_JE2_BE2.png",
    "반짝이는 수박 조각": "https://minecraft.wiki/images/Glistering_Melon_Slice_JE2_BE2.png",
    "발효된 거미 눈": "https://minecraft.wiki/images/Fermented_Spider_Eye_JE2_BE2.png",
    # Materials
    "9대 광물 압축 블록": "https://minecraft.wiki/images/Diamond_Block.png",
    "광물 환원 (Ingot Decompression)": "https://minecraft.wiki/images/Iron_Ingot_JE3_BE2.png",
    "원석 압축 블록 (Raw Ore Block)": "https://minecraft.wiki/images/Raw_Iron_Block.png",
    "원석 블록 환원": "https://minecraft.wiki/images/Raw_Iron_JE3_BE2.png",
    "철 / 금 조각 (Nugget) 환원": "https://minecraft.wiki/images/Iron_Nugget_JE2_BE2.png",
    "철 / 금 주괴 합성": "https://minecraft.wiki/images/Gold_Ingot_JE4_BE2.png",
    "네더라이트 주괴 (Netherite Ingot)": "https://minecraft.wiki/images/Netherite_Ingot_JE1_BE2.png?79364",
    "뼈 블록 (Bone Block)": "https://minecraft.wiki/images/Bone_Block.png",
    "건초 더미 (Hay Bale)": "https://minecraft.wiki/images/Hay_Bale.png",
    "점토 블록 (Clay Block)": "https://minecraft.wiki/images/Clay.png",
    "눈 블록 (Snow Block)": "https://minecraft.wiki/images/Snow_Block.png",
    "종이 (Paper)": "https://minecraft.wiki/images/Paper_JE2_BE2.png",
    "책 (Book)": "https://minecraft.wiki/images/Book_JE2_BE2.png?caac6",
    "책과 깃펜 (Book and Quill)": "https://minecraft.wiki/images/Book_and_Quill_JE2_BE2.png",
    "콘크리트 가루 (8개)": "https://minecraft.wiki/images/White_Concrete_Powder.png",
    # Misc
    "폭죽 로켓 (Firework Rocket)": "https://minecraft.wiki/images/Firework_Rocket_JE2_BE2.png?fa5d7",
    "폭죽 탄약 (Firework Star)": "https://minecraft.wiki/images/Firework_Star_JE2_BE2.png",
    "현수막 무늬 (Banner Pattern)": "https://minecraft.wiki/images/Banner_Pattern_JE1_BE1.png",
}

# Material icon fallback mapping
mat_icons = {
    "재료": "https://minecraft.wiki/images/Diamond_JE3_BE3.png",
    "막대": "https://minecraft.wiki/images/Stick_JE2_BE2.png",
    "막대기": "https://minecraft.wiki/images/Stick_JE2_BE2.png",
    "판자": "https://minecraft.wiki/images/Oak_Planks.png",
    "철주괴": "https://minecraft.wiki/images/Iron_Ingot_JE3_BE2.png",
    "금주괴": "https://minecraft.wiki/images/Gold_Ingot_JE4_BE2.png",
    "구리": "https://minecraft.wiki/images/Copper_Ingot_JE2_BE2.png",
    "구리주괴": "https://minecraft.wiki/images/Copper_Ingot_JE2_BE2.png",
    "구리블록": "https://minecraft.wiki/images/Block_of_Copper.png",
    "다이아": "https://minecraft.wiki/images/Diamond_JE3_BE3.png",
    "실": "https://minecraft.wiki/images/String_JE2_BE2.png",
    "조약돌": "https://minecraft.wiki/images/Cobblestone.png",
    "돌": "https://minecraft.wiki/images/Stone.png",
    "매끄러운돌": "https://minecraft.wiki/images/Smooth_Stone.png",
    "레드스톤": "https://minecraft.wiki/images/Redstone_Dust_JE2_BE2.png",
    "레드스톤횃불": "https://minecraft.wiki/images/Redstone_Torch.png",
    "석탄": "https://minecraft.wiki/images/Coal_JE4_BE3.png",
    "부싯돌": "https://minecraft.wiki/images/Flint_JE3_BE2.png",
    "깃털": "https://minecraft.wiki/images/Feather_JE3_BE2.png",
    "가죽": "https://minecraft.wiki/images/Leather_JE2_BE2.png",
    "종이": "https://minecraft.wiki/images/Paper_JE2_BE2.png",
    "책": "https://minecraft.wiki/images/Book_JE2_BE2.png?caac6",
    "유리": "https://minecraft.wiki/images/Glass.png",
    "화약": "https://minecraft.wiki/images/Gunpowder_JE2_BE2.png",
    "슬라임볼": "https://minecraft.wiki/images/Slimeball_JE2_BE2.png",
    "상자": "https://minecraft.wiki/images/Chest_%28S%29_JE2_BE2.png?6b608",
    "원목": "https://minecraft.wiki/images/Oak_Log.png",
    "밀": "https://minecraft.wiki/images/Wheat_JE2_BE2.png",
    "설탕": "https://minecraft.wiki/images/Sugar_JE2_BE2.png",
    "달걀": "https://minecraft.wiki/images/Egg_JE2_BE2.png",
    "양동이": "https://minecraft.wiki/images/Bucket_JE2_BE2.png",
    "우유": "https://minecraft.wiki/images/Milk_Bucket_JE2_BE2.png",
    "사과": "https://minecraft.wiki/images/Apple_JE3_BE3.png",
    "당근": "https://minecraft.wiki/images/Carrot_JE3_BE2.png",
    "흑요석": "https://minecraft.wiki/images/Obsidian.png",
    "네더석영": "https://minecraft.wiki/images/Nether_Quartz_JE2_BE2.png",
    "블레이즈막대": "https://minecraft.wiki/images/Blaze_Rod_JE2_BE2.png",
    "블레이즈가루": "https://minecraft.wiki/images/Blaze_Powder_JE2_BE2.png",
    "엔더진주": "https://minecraft.wiki/images/Ender_Pearl_JE3_BE2.png",
    "무거운핵심": "https://minecraft.wiki/images/Heavy_Core_JE1_BE1.png",
    "돌풍막대": "https://minecraft.wiki/images/Breeze_Rod_JE1_BE1.png",
    "네더의별": "https://minecraft.wiki/images/Nether_Star_JE2_BE2.png",
    "메아리": "https://minecraft.wiki/images/Echo_Shard_JE1_BE1.png",
    "바다의심장": "https://minecraft.wiki/images/Heart_of_the_Sea_JE2_BE2.png",
    "앵무조개": "https://minecraft.wiki/images/Nautilus_Shell_JE2_BE2.png",
    "셜커껍데기": "https://minecraft.wiki/images/Shulker_Shell_JE2_BE2.png",
    "인두껍": "https://minecraft.wiki/images/Turtle_Scute_JE2_BE2.png",
    "자수정": "https://minecraft.wiki/images/Amethyst_Shard_JE2_BE2.png",
    "화로": "https://minecraft.wiki/images/Furnace.png",
    "활": "https://minecraft.wiki/images/Bow_JE2_BE1.png?c428a",
    "보트": "https://minecraft.wiki/images/Oak_Boat_JE4_BE2.png?114d6",
    "마인카트": "https://minecraft.wiki/images/Minecart_JE4_BE2.png?92161",
    "호퍼": "https://minecraft.wiki/images/Hopper_%28D%29_JE8.png?331f6",
    "드롭퍼": "https://minecraft.wiki/images/Dropper.png",
    "제작대": "https://minecraft.wiki/images/Crafting_Table_JE4_BE3.png?5767f",
    "TNT": "https://minecraft.wiki/images/TNT.png",
    "나침반": "https://minecraft.wiki/images/Compass_JE2_BE2.png?e2169",
    "그릇": "https://minecraft.wiki/images/Bowl_JE2_BE2.png",
    "꽃": "https://minecraft.wiki/images/Poppy_JE2.png",
    "벌집조각": "https://minecraft.wiki/images/Honeycomb_JE2_BE2.png",
    "꿀병": "https://minecraft.wiki/images/Honey_Bottle_JE2_BE2.png",
    "뼈": "https://minecraft.wiki/images/Bone_JE3_BE2.png",
    "골분": "https://minecraft.wiki/images/Bone_Meal_JE2_BE2.png",
    "骨분": "https://minecraft.wiki/images/Bone_Meal_JE2_BE2.png",
    "모래": "https://minecraft.wiki/images/Sand.png",
    "자갈": "https://minecraft.wiki/images/Gravel.png",
    "철조각": "https://minecraft.wiki/images/Iron_Nugget_JE2_BE2.png",
    "금조각": "https://minecraft.wiki/images/Gold_Nugget_JE2_BE2.png",
}

lines = text.split("\n")
recipes = []
current_cat = None

def parse_grid_str(grid_str):
    rows = grid_str.split("<br>")
    grid = []
    for r in rows:
        r = r.strip()
        slots = re.findall(r"\[(.*?)\]", r)
        row_slots = []
        for s in slots:
            clean_s = s.strip()
            row_slots.append(clean_s if clean_s else "")
        while len(row_slots) < 3:
            row_slots.append("")
        grid.append(row_slots[:3])
    while len(grid) < 3:
        grid.append(["", "", ""])
    return grid[:3]

in_dye_table = False

for line in lines:
    line_strip = line.strip()
    
    if line_strip.startswith("## 5."):
        break
        
    if line_strip.startswith("### 4."):
        in_dye_table = False
        for c in categories:
            if c["code"] in line_strip:
                current_cat = c
                break
    elif line_strip.startswith("#### 🎨 16색 공식 염료"):
        in_dye_table = True
        continue
    elif line_strip.startswith("---"):
        in_dye_table = False

    if not current_cat:
        continue

    # 4-column recipes
    if not in_dye_table and line_strip.startswith("| **") and not line_strip.startswith("| **구분**") and not line_strip.startswith("| **대분류"):
        cols = [c.strip() for c in line.split("|")[1:-1]]
        if len(cols) == 4:
            raw_name, raw_grid, raw_ingr, raw_desc = cols
            if "완성 아이템" in raw_name:
                continue

            name_match = re.search(r"\*\*(.*?)\*\*", raw_name)
            name = name_match.group(1) if name_match else raw_name
            subname = ""
            sub_match = re.search(r"<br>\*\((.*?)\)\*", raw_name)
            if sub_match:
                subname = sub_match.group(1)
            
            count = 1
            count_match = re.search(r"\*\((\d+)개\)\*", raw_name)
            if count_match:
                count = int(count_match.group(1))
            
            is2x2 = "[🎒 2×2 가능]" in raw_desc or "[🎒 2×2 가능]" in raw_name or "2×2" in raw_desc
            is_shapeless = "무형 조합" in raw_desc
            
            grid = parse_grid_str(raw_grid)
            ing_lines = [ing.strip().replace("+ ", "") for ing in raw_ingr.split("<br>")]
            
            clean_id = re.sub(r"[^a-zA-Z0-9가-힣]", "_", name).strip("_").lower()
            if not clean_id:
                clean_id = f"item_{len(recipes)+1}"
                
            icon = item_icons.get(name, "https://minecraft.wiki/images/Crafting_Table_JE4_BE3.png?5767f")
            
            recipes.append({
                "id": clean_id,
                "name": name,
                "subname": subname,
                "category": current_cat["title"],
                "categoryId": current_cat["id"],
                "outputCount": count,
                "is2x2": is2x2,
                "recipeType": "무형 조합" if is_shapeless else "형태 조합",
                "grid": grid,
                "ingredientsRaw": raw_ingr.replace("<br>", " + "),
                "ingredientsList": ing_lines,
                "description": raw_desc,
                "icon": icon
            })

    # 16 Dyes
    elif in_dye_table and line_strip.startswith("| **"):
        cols = [c.strip() for c in line.split("|")[1:-1]]
        if len(cols) == 3:
            raw_name, raw_ingr, raw_source = cols
            if "완성 염료" in raw_name:
                continue
            name_match = re.search(r"\*\*(.*?)\*\*", raw_name)
            name = name_match.group(1) if name_match else raw_name
            clean_dye_name = f"{name} 염료" if not name.endswith("염료") else name
            
            clean_id = f"dye_{len(recipes)+1}"
            grid = [
                [raw_ingr.split(",")[0].split("또는")[0].strip(" `[]"), "", ""],
                ["", "", ""],
                ["", "", ""]
            ]
            recipes.append({
                "id": clean_id,
                "name": clean_dye_name,
                "subname": "16색 공식 염료",
                "category": "재료, 원자재 & 염료",
                "categoryId": "materials",
                "outputCount": 1,
                "is2x2": True,
                "recipeType": "무형 조합",
                "grid": grid,
                "ingredientsRaw": raw_ingr,
                "ingredientsList": [raw_ingr],
                "description": f"무형 조합 [🎒 2×2 가능]: {raw_ingr}. 자연 수급: {raw_source}",
                "icon": "https://minecraft.wiki/images/Red_Dye_JE2_BE2.png"
            })

# Build Reverse Material Index (usedIn)
material_map = {}

def normalize_material(m):
    m = m.strip(" `[]*")
    m = re.sub(r"\s+", "", m)
    if not m:
        return ""
    # Aliases
    aliases = {
        "철주괴": "철 주괴",
        "철": "철 주괴",
        "금주괴": "금 주괴",
        "금": "금 주괴",
        "구리": "구리 주괴",
        "구리주괴": "구리 주괴",
        "구리블록": "구리 블록",
        "다이아": "다이아몬드",
        "막대": "막대기",
        "판자": "목재 판자",
        "원목": "나무 원목",
        "석탄/목탄": "석탄",
        "매끄러운돌": "매끄러운 돌",
        "돌": "돌",
        "조약돌": "조약돌",
        "레드스톤": "레드스톤 가루",
        "실": "실",
        "깃털": "깃털",
        "부싯돌": "부싯돌",
        "가죽": "가죽",
        "종이": "종이",
        "책": "책",
        "유리": "유리",
        "화약": "화약",
        "슬라임볼": "슬라임볼",
        "상자": "상자",
        "밀": "밀",
        "달걀": "달걀",
        "설탕": "설탕",
        "양동이": "양동이",
        "흑요석": "흑요석",
        "네더석영": "네더 석영",
        "블레이즈막대": "블레이즈 막대",
        "블레이즈가루": "블레이즈 가루",
        "엔더진주": "엔더 진주",
        "무거운핵심": "무거운 핵심",
        "돌풍막대": "돌풍 막대",
        "네더의별": "네더의 별",
        "메아리": "메아리 조각",
        "바다의심장": "바다의 심장",
        "앵무조개": "앵무조개 껍데기",
        "셜커껍데기": "셜커 껍데기",
        "화로": "화로",
        "활": "활",
        "보트": "보트",
        "마인카트": "마인카트",
        "호퍼": "호퍼",
        "그릇": "그릇",
        "벌집조각": "벌집 조각",
        "꿀병": "꿀이 든 병",
        "골분": "骨분",
        "뼈": "뼈",
        "모래": "모래",
        "자갈": "자갈",
        "철조각": "철 조각",
        "금조각": "금 조각",
    }
    return aliases.get(m, m)

for r in recipes:
    used_materials = set()
    # Check grid slots
    for row in r["grid"]:
        for slot in row:
            clean = normalize_material(slot)
            if clean and clean != "재료" and clean != "블록" and clean != "광물" and clean != "원석" and clean != "주괴":
                used_materials.add(clean)
            elif clean == "재료":
                for alt in ["다이아몬드", "철 주괴", "돌", "목재 판자", "금 주괴", "가죽"]:
                    used_materials.add(alt)
            elif clean == "블록":
                for alt in ["목재 판자", "조약돌", "돌", "벽돌"]:
                    used_materials.add(alt)
            elif clean in ["광물", "주괴"]:
                for alt in ["철 주괴", "금 주괴", "다이아몬드", "구리 주괴", "레드스톤 가루"]:
                    used_materials.add(alt)
            elif clean == "원석":
                for alt in ["철 원석", "금 원석", "구리 원석"]:
                    used_materials.add(alt)
    
    # Check ingredientsList
    for ing in r["ingredientsList"]:
        for key in ["철 주괴", "금 주괴", "다이아몬드", "구리 주괴", "막대기", "목재 판자", "조약돌", "돌", "레드스톤", "실", "부싯돌", "깃털", "가죽", "종이", "유리", "화약", "슬라임볼", "상자", "밀", "달걀", "설탕", "흑요석", "네더 석영", "블레이즈 막대", "엔더 진주", "무거운 핵심", "돌풍 막대", "네더의 별", "메아리 조각", "바다의 심장", "앵무조개 껍데기", "셜커 껍데기", "화로", "활", "보트", "마인카트", "호퍼", "벌집 조각", "사과", "당근", "호박"]:
            if key in ing or key.replace(" ", "") in ing:
                used_materials.add(key)
                
    for mat in used_materials:
        if mat not in material_map:
            material_map[mat] = []
        material_map[mat].append(r["id"])

# Default Quick Inventory / Hotbar Materials
hotbar_materials = [
    {"name": "철 주괴", "count": 64, "icon": "https://minecraft.wiki/images/Iron_Ingot_JE3_BE2.png"},
    {"name": "다이아몬드", "count": 64, "icon": "https://minecraft.wiki/images/Diamond_JE3_BE3.png"},
    {"name": "목재 판자", "count": 64, "icon": "https://minecraft.wiki/images/Oak_Planks.png"},
    {"name": "막대기", "count": 64, "icon": "https://minecraft.wiki/images/Stick_JE2_BE2.png"},
    {"name": "조약돌", "count": 64, "icon": "https://minecraft.wiki/images/Cobblestone.png"},
    {"name": "레드스톤 가루", "count": 64, "icon": "https://minecraft.wiki/images/Redstone_Dust_JE2_BE2.png"},
    {"name": "금 주괴", "count": 64, "icon": "https://minecraft.wiki/images/Gold_Ingot_JE4_BE2.png"},
    {"name": "구리 주괴", "count": 64, "icon": "https://minecraft.wiki/images/Copper_Ingot_JE2_BE2.png"},
    {"name": "무거운 핵심", "count": 1, "icon": "https://minecraft.wiki/images/Heavy_Core_JE1_BE1.png"},
]

# Random Splash Texts
splash_texts = [
    "1.21 Tricky Trials 최신 대백과!",
    "철퇴 (Mace) 조합 가능!",
    "크래프터 (Crafter) 자동화 지원!",
    "Never dig straight down!",
    "3×3 조합대의 모든 것!",
    "다이아몬드를 찾아라!",
    "주민 직업 블록 13종 전종 수록!",
    "16색 염료 배합 마스터!",
    "9 × 9 = 81!",
    "Creeper? Aw man!",
    "E 키를 누르면 인벤토리!",
    "쉬프트 클릭으로 빠른 제작!",
]

js_content = f"""/**
 * 마인크래프트 조합법 대백과사전 데이터베이스 (Minecraft Crafting DB)
 * Generated from 001 마인크래프트_조합법_대백과.md
 */

const MINECRAFT_CATEGORIES = {json.dumps(categories, ensure_ascii=False, indent=2)};

const MINECRAFT_RECIPES = {json.dumps(recipes, ensure_ascii=False, indent=2)};

const MINECRAFT_MATERIAL_MAP = {json.dumps(material_map, ensure_ascii=False, indent=2)};

const MINECRAFT_HOTBAR_ITEMS = {json.dumps(hotbar_materials, ensure_ascii=False, indent=2)};

const MINECRAFT_SPLASH_TEXTS = {json.dumps(splash_texts, ensure_ascii=False, indent=2)};

const MINECRAFT_MATERIAL_ICONS = {json.dumps(mat_icons, ensure_ascii=False, indent=2)};

// Helper to look up recipe by ID
function getRecipeById(id) {{
  return MINECRAFT_RECIPES.find(r => r.id === id);
}}

// Helper to get recipes that can be made using a specific material
function getRecipesUsingMaterial(materialName) {{
  const clean = materialName.trim().replace(/\\s+/g, '');
  const matchingRecipeIds = new Set();
  
  for (const [matKey, recipeIds] of Object.entries(MINECRAFT_MATERIAL_MAP)) {{
    const cleanKey = matKey.replace(/\\s+/g, '');
    if (cleanKey.includes(clean) || clean.includes(cleanKey)) {{
      recipeIds.forEach(id => matchingRecipeIds.add(id));
    }}
  }}
  
  // Also scan recipes directly
  MINECRAFT_RECIPES.forEach(r => {{
    if (r.ingredientsRaw.includes(materialName) || 
        r.description.includes(materialName) ||
        r.grid.some(row => row.some(slot => slot && (slot.includes(materialName) || materialName.includes(slot))))) {{
      matchingRecipeIds.add(r.id);
    }}
  }});
  
  return Array.from(matchingRecipeIds).map(id => getRecipeById(id)).filter(Boolean);
}}
"""

with open("js/recipes-data.js", "w", encoding="utf-8") as f:
    f.write(js_content)

print(f"Generated js/recipes-data.js successfully with {len(recipes)} recipes and {len(material_map)} materials!")
