"""記憶の店（昔働いていたファミレスを記憶から起こした店・layout_v11）を、5パターンと同じ決まりに合わせた版。

layout_v11.json（記憶のまま）は変えずに残し、ここで直した版を作る。
直したこと（2026-10-21 エイイチと決めたこと）
- 建物の形：客席の奥の壁はそのまま。トイレ・パントリーの出入り口・洗い場・物置の並びが、その外へ約2.2m出っ張る
- 空いた所は厨房が広がる（キッチンと冷蔵庫を奥へ延ばし、出っ張りとの間に裏の通路）
- トイレへは、パントリーの壁ぞいの通路を奥へ進んで入る。元のトイレの場所は通路。トイレの手前に短い仕切り壁（約2.6m）
- トイレの客席側（通路側）に厚い壁（30cm）、入口は下向き（通路の突き当たり）
- 上の並びの右端の4人席は残す（当時もあった）。トイレとの間は、トイレの厚い壁と通路の仕切り壁でへだてる
- 入口の右に待合を足した。レジを2.2mから2.5mにし、内側に店員の立つ所を付けた
- 待機場所を2.2×0.7mから2.4×0.8mに広げた（3台のまま。1台0.8×0.8m）（2026-10-22、codex の2回目の検証を受けて）
- パントリーの上の通路に出入りできなかったので、出入り口を2つ開けた（2026-10-22 エイイチの指摘。店員もここを通る）
  A：受け渡し口（上）のすぐ上の、パントリーの壁に1m（客席側のトイレへの通路とつながる）
  B：パントリーの上の端（受け渡し口（上）から上の通路へ）
  A・B とも扉はなく、開いているだけ。扉があるのは、上の通路から洗い場とキッチンへ入る所
- 仕切り壁の上の4人席2つを、壁との間が0.6mになるまで寄せた（ロボットが壁側から入らないように）
"""
import json
from pathlib import Path

import famires_gen2 as gen

HERE = Path(__file__).parent

WING_X0, WING_DEPTH = 7.6, 2.2   # 出っ張りの左端と奥行き（仮）


def p0_memory():
    B = json.load(open(HERE / "layout_v11.json", encoding="utf-8"))
    W, D0 = B["outer"]["w"], B["outer"]["d"]
    D = D0 + WING_DEPTH
    keep = {"パントリー", "冷凍庫", "保存庫", "社員トイレ", "更衣室", "こおり", "ドリンクバー"}
    rooms = [dict(r) for r in B["rooms"] if r["label"] in keep]
    rooms += [
        dict(label="キッチン", rect=[12.0, 6.0, 19.0, 16.0], kind="back"),
        dict(label="冷蔵庫", rect=[19.0, 10.5, 21.0, 16.0], kind="back"),
        # 出っ張り：トイレ・パントリーの出入り口（通路）・洗い場・物置
        dict(label="トイレ", rect=[WING_X0, D0, 9.5, D], kind="guest"),
        dict(label="洗い場", rect=[12.0, D0, 21.0, D], kind="back"),
        dict(label="物置", rect=[21.6, D0, W, D], kind="back"),
        # 建物の外（出っ張りの左）
        dict(label="建物の外", rect=[0.0, D0, WING_X0, D], kind="outside"),
        *gen.register([9.8, 2.2, 12.3, 2.9], [9.8, 2.9, 12.3, 3.7]),
        dict(label="待合", rect=[12.7, 0.0, 13.9, 0.5], kind="guest"),
    ]
    walls = [dict(w) for w in B["walls"] if w["label"] != "客席と裏の壁"]
    walls += [dict(label="客席と裏の壁", rect=[19.0, 6.0, W, 6.25])]
    # トイレの手前の短い仕切り壁（上の客席とトイレへの通路の間・約2.6m）
    walls += [dict(label="通路の仕切り壁", rect=[7.9, 14.4, 8.1, D0])]
    # 通路とバックヤード（パントリーの出入り口）の間の壁：パントリーの壁をトイレまで延ばす
    # 受け渡し口（上）のすぐ上を1m開けて、客席側（トイレへの通路）との出入り口にする（2026-10-22 エイイチと決めた）
    door_a = [9.5, 14.0, 9.8, 15.0]
    walls += [dict(label="パントリーの壁", rect=[9.5, door_a[3], 9.8, D0])]
    # 店員の出入り口：A＝パントリーの上の通路と客席側の間、B＝パントリーの上の端（受け渡し口（上）から上の通路へ）
    # door：扉があるか。A・B は扉のない、開いているだけの所（扉があると誰かが開けないといけないため）
    # 扉があるのは、上の通路から洗い場とキッチンへ入る所（位置は仮）
    doors = [dict(label="出入り口（パントリーの上の通路と客席）", rect=door_a, kind="staff", door=False),
             dict(label="出入り口（パントリーと上の通路）", rect=[9.8, 13.9, 12.0, 14.0], kind="staff", door=False),
             dict(label="洗い場の扉", rect=[12.2, D0, 13.1, D0 + 0.1], kind="staff", door=True),
             dict(label="キッチンの扉", rect=[12.2, 15.9, 13.1, 16.0], kind="staff", door=True)]
    # トイレの壁：通路側（下）は厚さ30cm、入口0.9m。右（パントリーの出入り口側）も壁
    door_x0, door_x1 = 8.3, 9.2
    walls += [dict(label="トイレの壁", rect=[WING_X0, D0, door_x0, D0 + 0.3]),
              dict(label="トイレの壁", rect=[door_x1, D0, 9.5, D0 + 0.3]),
              dict(label="トイレの壁", rect=[9.2, D0 + 0.3, 9.5, D])]
    toilet_door = [door_x0, D0 - 1.2, door_x1, D0]

    tables = []
    for t in B["tables"]:
        if t["type"] == "t4":
            tables.append(dict(type="t4", x=round(t["x"] - 0.6, 2), y=round(t["y"] - 0.6, 2), w=1.2, h=1.2, seats=4))
        elif t["type"] == "r4":
            tables.append(dict(type="r4", x=round(t["x"] - 0.55, 2), y=round(t["y"] - 0.55, 2), w=1.1, h=1.1, seats=4))
        elif t["type"] == "long6":
            tables.append(dict(type="long6", x=round(t["x"] - 1.6, 2), y=round(t["y"] - 0.97, 2), w=3.2, h=1.94, seats=6))
        else:
            tables.append({k: t[k] for k in ("type", "x", "y", "w", "h", "seats", "flip", "mirror") if k in t})
    # 仕切り壁（y 8.6〜9.0）の上の4人席2つ：壁との間が1.0mあり、ロボットが壁側から入っていたので、
    # 下の区画と同じ0.6m（ロボットが通れない幅）まで壁に寄せる（2026-10-22 エイイチの指摘）
    for t in tables:
        if t["type"] == "t4" and abs(t["y"] - 10.0) < 1e-6:
            t["y"] = 9.6

    # 待機場所：記憶のまま（2.2×0.7m）だと3台分（1台0.8×0.8m）に足りないので、右に0.2m・手前に0.1m広げる（2026-10-22 エイイチと決めた）
    sb0 = B["robot_standby"]
    standby = dict(label=sb0["label"], rect=[12.2, 5.1, 14.6, 5.9], slots=3)

    dish = [d for d in B["dish_up"] if "下" in d["label"]] + [d for d in B["dish_up"] if "下" not in d["label"]]
    outline = [(0, 0), (W, 0), (W, D), (WING_X0, D), (WING_X0, D0), (0, D0)]
    return dict(name="② 定番の郊外型", style="定番の郊外型", outer=dict(w=W, d=D), outline=outline,
                entrance=dict(side="bottom", a0=B["entrance"]["x0"], a1=B["entrance"]["x1"]),
                rooms=rooms, walls=walls, toilet_doors=[toilet_door], dish_up=dish, doors=doors,
                robot_standby=standby, tables=tables)
