"""鸦堡地下层场景图(44×32 tile = 1408×1024)。

  北排: 酒窖(砖地大拱厅,酒架成排) | 发电机房(总电闸) | 石梯间(上行回一层厨房)
  服务走道(东西贯通,油灯昏暗)
  南排: 储藏室(夯土地,工具绳索,**密道暗门**) | 暗房(红灯,母带铁柜) | 冰窖(霜地,空石台)
  最南: 密道(凿岩窄隧道,东端没入黑暗——通向船屋)

运行:python -m genesis.mapgen.castle_b1
"""

from __future__ import annotations

import logging
from pathlib import Path

from genesis.mapgen.interior import InteriorSpec, Room, build_interior

logger = logging.getLogger(__name__)

ROOT = Path(__file__).resolve().parents[3]
OBJECT_DIR = ROOT / "assets/sprites/objects/ravenisle"
FLOORS_DIR = OBJECT_DIR / "floors"
OUT_PATH = ROOT / "assets/sprites/maps/ravenisle/castle_b1.png"

ROOMS = [
    Room(
        "cellar", "酒窖", (2, 2, 21, 13), "brick", face="wall_stone",
        furniture=[
            ("wine_rack.png", 170, 190),
            ("wine_rack.png", 390, 190),
            ("wine_rack.png", 610, 190),
            ("wine_rack.png", 280, 335),     # 中排酒架形成遮挡视线的"巷道"
            ("wine_rack.png", 500, 335),
            ("wine_barrels.png", 645, 400),
        ],
        glows=[(350, 300, 22, (255, 180, 90), 0.24), (600, 250, 20, (255, 180, 90), 0.22)],
        anchor=(340, 280),
    ),
    Room(
        "generator", "发电机房", (24, 2, 33, 13), "stone", face="wall_stone",
        furniture=[
            ("generator_machine.png", 940, 235),  # 柴油发电机
            ("barrels.png", 1035, 300),           # 备用柴油桶
        ],
        glows=[(940, 195, 22, (255, 120, 60), 0.32)],
        anchor=(930, 280),
    ),
    Room(
        "stairs_b1", "石梯间", (36, 2, 42, 13), "stone", face="wall_stone",
        furniture=[
            ("stone_stairs_up.png", 1262, 400),   # 上行大石梯,回一层厨房
            ("candelabra.png", 1200, 335),
        ],
        glows=[(1265, 160, 30, (255, 190, 100), 0.40)],
        anchor=(1255, 300),
    ),
    Room("corridor", "服务走道", (2, 16, 42, 17), "stone", face="wall_stone",
         glows=[(300, 545, 18, (255, 180, 90), 0.22), (700, 545, 18, (255, 180, 90), 0.22),
                (1100, 545, 18, (255, 180, 90), 0.22)],
         anchor=(700, 545)),
    Room(
        "storeroom", "储藏室", (2, 20, 12, 26), "earth", face="wall_stone",
        furniture=[
            ("storage_shelves.png", 170, 700),    # 绳索/油灯/工具,新得过分
            ("crates.png", 330, 715),
            ("crates.png", 120, 848),             # 挪开的木箱,半掩着南墙暗门
        ],
        glows=[(250, 730, 20, (255, 180, 90), 0.24)],
        anchor=(230, 760),
    ),
    Room(
        "darkroom", "暗房", (15, 20, 25, 26), "stone", face="wall_stone",
        furniture=[
            ("darkroom_table.png", 590, 720),     # 显影盘与药水
            ("wall_safe.png", 790, 700),          # 铁皮柜:负片母带 + 阮青私照
        ],
        glows=[(640, 730, 46, (255, 70, 55), 0.45), (760, 690, 28, (255, 70, 55), 0.30)],
        anchor=(640, 740),
    ),
    Room(
        "cold_room", "冰窖", (28, 20, 40, 26), "ice", face="wall_stone",
        furniture=[
            ("stone_slab.png", 1100, 762),        # 擦得干净的空石台
        ],
        glows=[(1100, 720, 60, (150, 200, 240), 0.32), (1000, 800, 38, (150, 200, 240), 0.20)],
        anchor=(1090, 750),
    ),
    Room("passage", "密道", (3, 29, 38, 30), "rock", face="wall_stone",
         glows=[(250, 972, 20, (255, 170, 80), 0.38), (600, 972, 20, (255, 170, 80), 0.38),
                (950, 972, 20, (255, 170, 80), 0.38)],
         anchor=(500, 965)),
]

DOORS = [
    (10, 14, 11, 15, "brick"),     # 酒窖 ↔ 走道
    (28, 14, 29, 15, "stone"),     # 发电机房 ↔ 走道
    (38, 14, 39, 15, "stone"),     # 石梯间 ↔ 走道
    (6, 18, 7, 19, "earth"),       # 走道 ↔ 储藏室
    (19, 18, 20, 19, "stone"),     # 走道 ↔ 暗房
    (33, 18, 34, 19, "ice"),       # 走道 ↔ 冰窖
    (5, 27, 6, 28, "rock"),        # 储藏室 ↔ 密道(木架后的暗门)
]

# 密道东端没入黑暗(通向船屋的方向)
VEILS = [(32, 29, 38, 30, 165), (36, 29, 38, 30, 220)]

WALL_OBJECTS = [
    ("switchboard.png", 855, 95),  # 发电机房北墙:整面闸刀,唯独总闸手柄擦得干净
]

SPEC = InteriorSpec(name="castle_b1", size_tiles=(44, 32), rooms=ROOMS,
                    doors=DOORS, patches=[], wall_objects=WALL_OBJECTS, veils=VEILS)


def main() -> None:
    logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(name)s %(message)s")
    img = build_interior(SPEC, FLOORS_DIR, OBJECT_DIR)
    OUT_PATH.parent.mkdir(parents=True, exist_ok=True)
    img.save(OUT_PATH)
    logger.info("✅ 鸦堡地下层已合成 → %s (%dx%d)", OUT_PATH, *img.size)


if __name__ == "__main__":
    main()
