#!/usr/bin/env python3
"""
build_room_palette.py — сводит kid.pal (уже собран
gen_kid_placeholder.py) + Floor + Wall тайлы в ОДНУ merged-палитру
room.pal, грузимую ОДИН раз через gfx_pal_fload (см. poc.c) — экран
показывает Kid и тайлы ОДНОВРЕМЕННО, значит их "свои" цвета обязаны
жить в одной палитре (см. --seed-pal в toolchain/png_strip.py).

На вход — только типы, которые Фаза 1 реально рисует (room_draw
рисует только загруженные атласы; Floor/Wall — единственные твёрдые
типы с нетривиальной картинкой заглушки, см. gen_tile_placeholders.py
draw_floor_like/draw_wall_like).  Остальные 30 типов из Фазы 1
исключены полностью (не грузятся, не рисуются, PORT_PLAN.md §5) —
добавить сюда, когда понадобятся.

Перезаписывает res/tiles/tile01.raw/.atl (Floor) и tile14.raw/.atl
(Wall, TILE_WALL=0x14 — room.c ищет "tile%02x.atl" ОБЯЗАТЕЛЬНО в hex,
не decimal!) с индексами палитры, согласованными с kid.pal; пишет
kid+floor+wall.pal рядом с kid.pal (poc.c грузит её вместо отдельной
kid.pal).
"""
import subprocess
import sys
from pathlib import Path

HERE = Path(__file__).resolve().parent
PROJ_ROOT = HERE.parents[3]
TILES_DIR = HERE.parent / "res" / "tiles"
PNG_STRIP = PROJ_ROOT / "toolchain" / "png_strip.py"
MKATLAS = PROJ_ROOT / "toolchain" / "mkatlas.py"

ROOM_TILE_W = 32
ROOM_ROW_H = 64

KID_PAL = HERE / "kid.pal"
OUT_PAL = HERE / "room.pal"

TYPES = [0x01, 0x14, 0x03, 0x13, 0x0E, 0x0B]  # Floor, Wall, Pillar, Torch, Debris, Loose
# (2026-07-16: временное ограничение до 2 типов снято — корень
# вероятностного "снега" найден: tile_atlas_load()/room_draw() трогали
# W3 транзитивно (через atlas_load/gfx_blit_part) ИЗ БАНКА, который сам
# живёт в W3 — конфликт. Обе функции переехали в room_draw.c (HOME),
# см. её шапку.)


def run(cmd):
    print("+", " ".join(str(c) for c in cmd))
    subprocess.run([str(c) for c in cmd], check=True)


def main():
    if not KID_PAL.exists():
        sys.exit(f"build_room_palette: нет {KID_PAL} — сначала gen_kid_placeholder.py")

    seed = KID_PAL
    for t in TYPES:
        base = f"tile{t:02x}"          # room.c ищет "tile%02x.atl" — hex, не decimal
        png = TILES_DIR / f"{t:X}-0.png"
        raw = TILES_DIR / f"{base}.raw"
        pal = TILES_DIR / f"{base}_merged.pal"
        atl = TILES_DIR / f"{base}.atl"

        run([sys.executable, PNG_STRIP, raw, pal, png,
             "--canvas", f"{ROOM_TILE_W}x{ROOM_ROW_H}",
             "--anchor", "top-left", "--seed-pal", seed])
        run([sys.executable, MKATLAS, atl, f"{raw}:{ROOM_TILE_W}x{ROOM_ROW_H}:1x1"])
        seed = pal

    import shutil
    shutil.copyfile(seed, OUT_PAL)
    print(f"build_room_palette: итоговая палитра -> {OUT_PAL}")


if __name__ == "__main__":
    main()
