import sys
import matplotlib; matplotlib.use("Agg")
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon, Rectangle, Circle
sys.path.insert(0, "/opt/dom45/arhitektor/projects/gamburg")
import geom as G
OUT = "/tmp/claude-1000/-opt-dom45-arhitektor/b5407753-d221-46b8-b718-48292f3c19ba/scratchpad/gamburg_interior/razvertka_kuhni.png"
F = 0.224; YS = 6.323
fmt = lambda v: f"{v:.3f}".replace(".", ",")
f2 = lambda v: f"{v:.2f}".replace(".", ",")
zc = lambda y: G.ZR(y) - G.FLOOR_UP
fig, ax = plt.subplots(figsize=(12, 17), dpi=200)
RED = "#b5262a"; OR = "#e07b00"; BL = "#1a73c8"
XS, OS = 0.6, 0.0          # южная стена: x0, смещение по z
OE, XE = -6.0, 0.0         # восток и запад — нижний ряд
XW = 3.1
def panel(x0, oy, width, ztop, title):
    ax.add_patch(Polygon([(x0, oy), (x0, oy + ztop(0)), (x0 + width, oy + ztop(width)), (x0 + width, oy)], closed=True, fc="#f3efe6", ec="#333", lw=2, zorder=1))
    ax.text(x0 + width / 2, oy + max(ztop(0), ztop(width)) + 0.55, title, ha="center", va="center", fontsize=12.5, fontweight="bold", linespacing=1.3)
def ztxt(x, z, s, fs=12, color="#111", oy=0):
    ax.text(x, z + oy, s, ha="center", va="center", fontsize=fs, color=color, zorder=9, linespacing=1.25, bbox=dict(fc="white", ec=color, lw=0.7, boxstyle="round,pad=0.25"))
def call(px, pz, tx, tz, s, color=OR, marker="o", oy=0, fs=12):
    ax.plot([px, tx], [pz + oy, tz + oy], color=color, lw=1, zorder=6)
    ax.plot(px, pz + oy, marker, ms=11, color=color, mec="white", mew=1.4, zorder=8)
    ztxt(tx, tz, s, fs=fs, color="#7a3f00" if color == OR else color, oy=oy)
def zscale(x0, oy):
    for z in (0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0):
        ax.plot([x0 - 0.08, x0], [z + oy] * 2, color="k", lw=1); ax.text(x0 - 0.12, z + oy, f2(z), ha="right", va="center", fontsize=11)
def tick(x, oy, lab, row=0):
    ax.plot([x, x], [oy, oy - 0.1], color="k", lw=1.2); ax.text(x, oy - 0.15 - 0.28 * row, lab, ha="center", va="top", fontsize=11.5)
# ================= ЮГ =================
panel(XS, OS, 3.402, lambda h: zc(YS), "ЮГ (стена Х) — вид изнутри, запад справа")
Sx = lambda u: XS + (3.402 - u)
call(Sx(0.676), 0.30, Sx(0.52), 0.90, "8\n0,676 / 0,30", fs=10.5)
call(Sx(1.046), 0.55, Sx(0.62), 1.55, "В1\n1,046 / 0,55", BL, "s", fs=10.5)
call(Sx(1.106), 0.55, Sx(1.50), 1.55, "Т3\n1,106 / 0,55", BL, "s", fs=10.5)
call(Sx(1.076), 0.45, Sx(1.18), 0.10, "К1 Ø50 · 1,076 / 0,45", BL, "s", fs=9.5)
call(Sx(1.576), 0.30, Sx(2.05), 0.80, "9 (32 А)\n1,576 / 0,30", fs=10.5)
call(Sx(1.576), 2.00, Sx(1.576), 2.45, "9в\n1,576 / 2,00", fs=10.5)
call(Sx(2.276), 1.20, Sx(2.35), 1.85, "10\n2,276 / 1,20", fs=10.5)
call(Sx(3.076), 0.30, Sx(3.00), 0.85, "11\n3,076 / 0,30", fs=10.5)
ax.add_patch(Circle((Sx(3.272), 0.38), 0.035, fc="none", ec=BL, lw=1.5, ls=(0, (3, 2)), zorder=7))
ax.plot([Sx(3.272), Sx(3.10)], [0.40, 1.30], color=BL, lw=0.8, zorder=6)
ztxt(Sx(3.10), 1.45, "отв. Ø70\n3,272 / 0,38", fs=9.5, color=BL)
for u, lab, row in ((0, "0", 0), (0.676, "0,676", 0), (1.076, "1,046…1,106", 1), (1.576, "1,576", 0), (2.276, "2,276", 0), (3.076, "3,076", 0), (3.402, "3,402", 1)): tick(Sx(u), 0, lab, row)
ax.text(XS + 1.7, -1.45, "подписи точек: x / z, м (x — от западного угла кухни, по грани отделки)\n8 посудомойка · 9 варочная 32 А · 9в розетка вытяжки · 10 розетка двойная над столешницей\n11 холодильник · В1 хол. вода Ø20 · Т3 гор. вода Ø20 · К1 канализация Ø50 · отв. Ø70 в СИП (К1 в тех. пом.)", ha="center", fontsize=10.5, color="#444", linespacing=1.4)
ax.text(XS + 1.7, zc(YS) + 0.12, f"потолок по скату (низ кровли): z {f2(zc(YS))}", ha="center", fontsize=12, color=RED)
zscale(XS, 0)
# ================= ВОСТОК (стена 3) =================
panel(XE, OE, 1.676, lambda h: zc(4.647 + h), "ВОСТОК (ст. 3)\nверх по скату 3,40 → 3,00")
Ex = lambda y: XE + (y - 4.647)
ax.add_patch(Rectangle((Ex(4.66), OE), 0.52, 1.93, fc="none", ec="#555", lw=1.5, ls=(0, (3, 2)), zorder=6))
ztxt(Ex(5.62), 0.9, "холодильник\n(план сайта)", fs=10, color="#444", oy=OE)
call(Ex(5.50), 2.40, Ex(5.50), 2.85, "13 бра\n5,276 / 2,40", oy=OE, fs=10.5)
for y, lab in ((4.647, "4,423"), (5.276 + F, "5,276"), (YS, "6,099")): tick(Ex(y), OE, lab)
ax.text(XE + 0.84, OE - 0.95, "y — от северной грани отделки гостиной", ha="center", fontsize=10.5, color="#444")
zscale(XE, OE)
# ================= ЗАПАД =================
panel(XW, OE, 1.813, lambda h: zc(YS - h), "ЗАПАД\nверх по скату 2,95 → 3,43")
Wx = lambda y: XW + (YS - y)
ax.add_patch(Rectangle((Wx(5.8005), OE + 0.346), 0.903, 1.73, fc="white", ec="#555", lw=1.5, zorder=3))
for f in (0.35, 0.65): ax.plot([Wx(5.8005) + 0.903 * f] * 2, [OE + 0.346, OE + 2.076], color="#7fb3d5", lw=2, zorder=4)
ztxt(Wx(5.349), 1.21, "ОП-04\n0,903×1,730\nниз 0,346\nверх 2,076", fs=10.5, color="#0a4a7a", oy=OE)
call(Wx(5.349) + 0.15, 0.30, Wx(5.349) + 0.555, 2.55, "12 ЭК-2\n5,125 / 0,30", oy=OE, fs=10.5)
for y, lab in ((YS, "0"), (5.8005, "0,522"), (4.8975, "1,425"), (4.51, "1,813")): tick(Wx(y), OE, lab, 1 if lab == "1,425" else 0)
ax.text(XW + 0.9, OE - 0.95, "расстояние от южного угла; на 1,813 — граница\nс гостиной (над ней БК, низ 3,235)", ha="center", fontsize=10.5, color=RED)
ax.set_xlim(-1.0, 5.2); ax.set_ylim(OE - 1.4, 4.0); ax.set_aspect("equal"); ax.axis("off")
fig.suptitle("Гамбург — кухня: развёртка стен с выводами\n(по граням отделки, z от чистого пола)", fontsize=16)
plt.savefig(OUT, dpi=200, bbox_inches="tight", facecolor="white", pad_inches=0.2)
from PIL import Image; print(Image.open(OUT).size)
