"""鸦堡二层场景图 v2(回形走廊 × 居中上锁的青之房,44×36 tile = 1408×1152)。

与一层引擎一致;本层所有隔墙 **2 tile 厚**(墙顶盖 + 朝南立面成对出现,墙才有体积)。

  北排: 顾长风(主客房) | 邵铭轩 | 程亦深 | 楼梯塔(下行)
  回形走廊(顶横廊+东西竖廊+底横廊)正中是**青之房**:阮青十年未动的房间,
  双开门紧锁、罩着暗纱,整层的人夜里都绕着它走。
  西列: 唐曼 | 白聿    东列: 温言 | 江离    南: 露台(石栏望海),阁楼拉梯在底廊东端

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

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_f2.png"

# 回形走廊(set union):顶横廊 + 西竖廊 + 东竖廊 + 底横廊
CORRIDOR_RECTS = [(2, 10, 41, 12), (11, 13, 13, 25), (30, 13, 32, 25), (14, 23, 29, 25)]

ROOMS = [
    Room(
        "br_gu", "顾长风的房间", (2, 2, 10, 7), "parquet", face="wall_wood",
        furniture=[
            ("bed_dark.png", 130, 208),
            ("writing_desk.png", 285, 182),   # 桌上摊满第七稿分镜
            ("suitcase.png", 300, 248),
            ("candelabra.png", 76, 168),
        ],
        glows=[(79, 140, 22, (255, 190, 100), 0.40), (285, 158, 18, (255, 195, 105), 0.30)],
        anchor=(210, 200),
    ),
    Room(
        "br_shao", "邵铭轩的房间", (13, 2, 20, 7), "parquet", face="wall_wood",
        furniture=[
            ("bed_dark.png", 482, 208),
            ("nightstand.png", 562, 180),     # 床头:失灵的卫星电话
            ("suitcase.png", 612, 244),       # 现金一半合同一半
        ],
        glows=[(562, 155, 16, (255, 190, 100), 0.28)],
        anchor=(540, 200),
    ),
    Room(
        "br_cheng", "程亦深的房间", (23, 2, 30, 7), "parquet", face="wall_wood",
        furniture=[
            ("bed_dark.png", 792, 208),
            ("vanity_mirror.png", 930, 185),  # 补光灯化妆镜(坏了两颗灯泡)
            ("suitcase.png", 862, 248),       # 敞开的戏服箱
        ],
        glows=[(930, 152, 22, (255, 215, 160), 0.36)],
        anchor=(860, 200),
    ),
    Room(
        "stairtower", "楼梯塔", (33, 2, 41, 7), "stone", face="wall_stone",
        furniture=[("staircase_down.png", 1200, 256), ("candelabra.png", 1100, 225)],
        glows=[(1200, 150, 32, (255, 190, 100), 0.42)],
        anchor=(1200, 215),
    ),
    *[
        Room("corridor", "二层走廊", rect, "parquet", face="wall_wood")
        for rect in CORRIDOR_RECTS
    ],
    Room(
        "br_tang", "唐曼的房间", (2, 15, 8, 20), "parquet", face="wall_wood",
        furniture=[
            ("writing_desk.png", 140, 558),   # 收拾得像办公室
            ("nightstand.png", 238, 540),     # 门后贴着手画的"各房间分布图"
            ("bed_iron.png", 110, 648),
        ],
        glows=[(140, 528, 18, (255, 190, 100), 0.30)],
        anchor=(175, 580),
    ),
    Room(
        "br_bai", "白聿的房间", (2, 23, 8, 28), "parquet", face="wall_wood",
        furniture=[
            ("nightstand.png", 178, 792),     # 床头敞开的药箱,镇静剂排成排
            ("medical_bag.png", 248, 800),
            ("bed_iron.png", 110, 905),
        ],
        glows=[(212, 765, 18, (220, 230, 240), 0.24)],
        anchor=(175, 830),
    ),
    Room(
        "master", "青之房(上锁)", (16, 15, 27, 20), "parquet", face="wall_wood",
        furniture=[
            ("vanity_mirror.png", 588, 565),  # 十年前的样子原封未动
            ("bed_dark.png", 718, 580),
            ("flower_vase.png", 838, 548),    # 一瓶没蔫的白菊
        ],
        anchor=(704, 580),
    ),
    Room(
        "br_wen", "温言的房间", (35, 15, 41, 20), "parquet", face="wall_wood",
        furniture=[
            ("bed_iron.png", 1182, 648),
            ("writing_desk.png", 1300, 562),  # 录音笔藏在三个地方
        ],
        glows=[(1300, 532, 18, (255, 190, 100), 0.30)],
        anchor=(1240, 590),
    ),
    Room(
        "br_jiang", "江离的房间", (35, 23, 41, 28), "parquet", face="wall_wood",
        furniture=[
            ("bed_iron.png", 1182, 905),      # 全层最素的房间
            ("writing_desk.png", 1290, 795),  # 桌上只有笔记本:『雾鸦·终稿』
        ],
        anchor=(1240, 840),
    ),
    Room(
        "balcony", "露台", (16, 28, 27, 33), "stone", face="wall_stone",
        furniture=[("candelabra.png", 560, 952)],   # 风里摇曳的烛台;石栏由墙体围成
        glows=[(704, 1000, 56, (130, 160, 215), 0.22)],  # 海上月光
        anchor=(704, 990),
    ),
]

DOORS = [
    (5, 8, 6, 9, "parquet"),        # 顶廊 ↔ 顾长风(2 格厚墙,门洞贯通)
    (16, 8, 17, 9, "parquet"),      # 顶廊 ↔ 邵铭轩
    (26, 8, 27, 9, "parquet"),      # 顶廊 ↔ 程亦深
    (36, 8, 37, 9, "stone"),        # 顶廊 ↔ 楼梯塔
    (9, 17, 10, 18, "parquet"),     # 西廊 ↔ 唐曼
    (9, 24, 10, 25, "parquet"),     # 西廊 ↔ 白聿
    (33, 17, 34, 18, "parquet"),    # 东廊 ↔ 温言
    (33, 24, 34, 25, "parquet"),    # 东廊 ↔ 江离
    (20, 26, 23, 27, "stone"),      # 底廊 ↔ 露台(玻璃双门)
]

PATCHES = [
    (3, 11, 40, 11, "carpet"),      # 顶廊红毯
    (12, 13, 12, 25, "carpet"),     # 西廊红毯
    (31, 13, 31, 25, "carpet"),     # 东廊红毯
    (13, 24, 30, 24, "carpet"),     # 底廊红毯
    (4, 19, 7, 20, "carpet"),       # 唐曼房小毯(细节)
]

WALL_OBJECTS = [
    # 顶廊北墙面:当年的剧照画框一字排开
    ("photo_frame.png", 300, 318), ("photo_frame.png", 560, 318),
    ("photo_frame.png", 820, 318), ("photo_frame.png", 1080, 318),
    ("note_wall.png", 1230, 478),   # 温言房北墙:便签红线墙
    ("double_door.png", 704, 748),  # 青之房紧锁的双开门(南墙正中,面向底廊)
    ("attic_ladder.png", 1010, 758),# 底廊东端:阁楼拉梯
]

# 青之房罩暗纱:十年未动的陈设隐约可辨
VEILS = [(16, 15, 27, 20, 150)]

SPEC = InteriorSpec(name="castle_f2", size_tiles=(44, 36), rooms=ROOMS,
                    doors=DOORS, patches=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("✅ 鸦堡二层(v2)已合成 → %s (%dx%d)", OUT_PATH, *img.size)


if __name__ == "__main__":
    main()
