#!/usr/bin/env python3
"""Rebuild plans/clinical-platform-master-plan.html from the markdown parts in this folder.

Parts: master-intro.md, master-plan.md (3 h2 parts: phases / where / decisions),
design-visit-shell.md (UX), design-data-layers.md (data), design.md (Clinical Core).
The prototype visit-shell-prototype.html is embedded by iframe.
Usage: python3 build-master.py   (then chown moonui3:moonui3 ../clinical-platform-master-plan.html)
"""
import os
import re

import markdown

HERE = os.path.dirname(os.path.abspath(__file__))
OUT = os.path.join(HERE, '..', 'clinical-platform-master-plan.html')


def md(name, shift=True):
    t = open(os.path.join(HERE, name), encoding='utf-8').read()
    if shift:  # demote headings so each doc sits under its section h2
        t = re.sub(r'^(#{1,5}) ', lambda m: '#' * (len(m.group(1)) + 1) + ' ', t, flags=re.M)
    h = markdown.markdown(t, extensions=['tables', 'fenced_code'])
    return h.replace('<table>', '<div class="scroll"><table>').replace('</table>', '</table></div>')


intro = md('master-intro.md', False)
plan = md('master-plan.md', False)
ux = md('design-visit-shell.md')
data = md('design-data-layers.md')
core = md('design.md')
gyn = md('design-gyn-integration.md')
parts = re.split(r'(?=<h2>)', plan)
ph = next(p for p in parts if 'المراحل الموحّدة' in p)
wh = next(p for p in parts if 'ننفذ فين' in p)
dc = next(p for p in parts if 'القرارات المجمّعة' in p)

nav = [('sum', 'الخلاصة'), ('proto', '١ النموذج التفاعلي'), ('phases', '٢ المراحل'), ('where', '٣ ننفذ فين'),
       ('dec', '٤ القرارات'), ('ux', '٥ تصميم الشاشة'), ('data', '٦ تصميم البيانات'),
       ('gyn', '٥ب دمج النسا'), ('core', '٧ البلوكات المشتركة'), ('facts', '٨ الحصر الأصلي')]


def sec(i, title, body):
    inner = body if body.lstrip().startswith('<h2') else f'<h2>{title}</h2>' + body
    return f'<section id="{i}"><div class="doc">{inner}</div></section>'


CSS = """
:root{--bg:#eef2f1;--ink:#11201e;--ink2:#34504b;--muted:#7c8c89;--line:#dde6e4;--teal:#0f766e;--mint:#e6f4f1}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--ink);font-family:Cairo,system-ui,sans-serif;font-size:14.5px;line-height:1.75}
.top{background:linear-gradient(135deg,#0b2a26,#0f766e);color:#fff;padding:36px 18px 56px}.top .in,.wrap,nav .in{max-width:1240px;margin:0 auto}
.top h1{margin:4px 0 8px;font-size:30px}.top p{margin:0;opacity:.92;max-width:900px}.top small{opacity:.75;font-weight:700}
.pills{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}.pills span{background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.25);border-radius:99px;padding:4px 12px;font-weight:700;font-size:12.5px}
nav{position:sticky;top:0;z-index:5;background:rgba(238,242,241,.95);backdrop-filter:blur(8px);border-bottom:1px solid var(--line);margin-top:-36px}nav .in{display:flex;gap:6px;overflow-x:auto;padding:10px 18px}
nav a{white-space:nowrap;text-decoration:none;padding:6px 12px;border-radius:9px;background:#fff;border:1px solid var(--line);font-weight:700;font-size:12.5px;color:var(--ink2)}nav a:hover{border-color:var(--teal)}
.wrap{padding:0 18px 70px}section{margin-top:22px}
.doc{background:#fff;border:1px solid var(--line);border-radius:14px;padding:20px 26px;box-shadow:0 8px 26px rgba(11,42,38,.07)}
h2{font-size:22px;margin:0 0 12px;padding-bottom:6px;border-bottom:2px solid var(--mint);color:var(--teal)}h3{font-size:18px;margin:26px 0 10px}h4{font-size:15.5px;margin:18px 0 6px}
code{font-family:Inter,ui-monospace,monospace;font-size:12px;background:#f1f5f4;border:1px solid var(--line);border-radius:5px;padding:0 5px;direction:ltr;unicode-bidi:isolate}
pre{background:#0b2a26;color:#d7efe9;border-radius:10px;padding:12px;overflow:auto;direction:ltr;text-align:left}pre code{background:none;border:0;color:inherit}
.scroll{overflow-x:auto;margin:10px 0}table{border-collapse:collapse;width:100%;font-size:13px}th{background:#0b2a26;color:#fff;text-align:start;padding:7px 9px}td{border-bottom:1px solid var(--line);padding:7px 9px;vertical-align:top}tr:nth-child(even) td{background:#fafcfb}
blockquote{margin:10px 0;padding:8px 14px;background:var(--mint);border-inline-start:4px solid var(--teal);border-radius:8px;color:var(--ink2)}
.frame{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:#f4f7f6}.frame iframe{width:100%;height:960px;border:0;display:block}
.btn{display:inline-block;margin:8px 0;padding:7px 14px;border-radius:9px;background:var(--teal);color:#fff;text-decoration:none;font-weight:700}
.note{color:var(--muted);font-size:12.5px}
"""

html = f'''<!doctype html><html lang="ar" dir="rtl"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<title>خطة المنصة الطبية الموحّدة — Moon Clinic</title>
<link href="https://fonts.googleapis.com/css2?family=Cairo:wght@400;600;700;800&family=Inter:wght@400;600&display=swap" rel="stylesheet">
<style>{CSS}</style></head><body>
<header class="top"><div class="in"><small>Moon Clinic · خطة شاملة · تحليل وتصميم — التنفيذ هنا (moonui3)</small>
<h1>المنصة الطبية الموحّدة</h1>
<p>البيانات المشتركة والخاصة بكل تخصص، وشاشة كروت قابلة للتخصيص (كل تخصص بشكله، وكل عيادة ودكتور يرتّب لنفسه)، و«أول زيارة»، وتوحيد الروشتة والتحاليل والأشعة والمستندات والطباعة. نفس الكود للعيادة والمركز والمستشفى، والفرق إعدادات.</p>
<div class="pills"><span>4 طبقات بيانات</span><span>13 تكرار اتحلّ</span><span>كل تخصص بشكله</span><span>تخصيص لكل عيادة ودكتور</span><span>أول زيارة على مرحلتين</span><span>روشتة وطلبات موحّدة</span><span>النسا متدمج</span><span>27 مرحلة (13 ★ للنسا)</span></div></div></header>
<nav><div class="in">{''.join(f'<a href="#{a}">{b}</a>' for a, b in nav)}</div></nav>
<div class="wrap">
{sec('sum', 'الخلاصة', intro)}
<section id="proto"><div class="doc"><h2>١ · النموذج التفاعلي</h2>
<p>جرّب: <b>التغذية</b> (بورد الدكتور زي ما هو)، و<b>الأسنان</b> (الشارت وكل الشاشات الفرعية)، و<b>العام والنسا</b> (خطوات). اختار الطبيب (د. هبة بالافتراضي، ود. سارة بترتيبها الخاص)، وشغّل <b>«تخصيص الشاشة»</b> علشان ترتّب وتكبّر وتخفي وتضيف كروت وتحفظ لنفسك أو للعيادة. وجرّب كمان السياق «إقامة مستشفى»، و«أول زيارة»، وتابلت وموبايل. وتحت النموذج لوحة الـ Registry: دي اللي كل تخصص بيعلنها، ومنها بيتحسب شكل الشاشة.</p>
<a class="btn" href="clinical-platform/visit-shell-prototype.html" target="_blank">افتح النموذج في صفحة كاملة ↗</a>
<div class="frame"><iframe src="clinical-platform/visit-shell-prototype.html" loading="lazy" title="Visit shell prototype"></iframe></div>
<p class="note">بيانات تجريبية · الحفظ في المتصفح بس.</p></div></section>
{sec('phases', '', ph)}
{sec('where', '', wh)}
{sec('dec', '', dc)}
{sec('ux', '٥ · تصميم الشاشة (UX)', ux)}
{sec('gyn', '٥ب · دمج تحليل النسا في المنصة', gyn)}
{sec('data', '٦ · تصميم البيانات — الطبقات الأربعة، والمحرك، وتسكين الحقول، وأول زيارة', data)}
{sec('core', '٧ · البلوكات المشتركة (Clinical Core) — الروشتة، والتحاليل، والأشعة، والمستندات، والطباعة', core)}
<section id="facts"><div class="doc"><h2>٨ · الحصر الأصلي (حقايق من الكود بـ file:line)</h2>
<ul><li><a href="clinical-core-unification-src/r1-prescriptions.md">r1 — الروشتة والأدوية في كل الموديولات</a></li><li><a href="clinical-core-unification-src/r2-lab-rad.md">r2 — التحاليل والأشعة</a></li><li><a href="clinical-core-unification-src/r3-shared-blocks.md">r3 — باقي البلوكات المشتركة</a></li><li><a href="clinical-platform/r4-fields-screens.md">r4 — حصر كل الحقول وتركيب الشاشات + الـ13 تكرار</a></li></ul></div></section>
<p class="note" style="text-align:center;margin-top:30px">Moon Clinic · المنصة الطبية الموحّدة — 2026-10-21 · حصر الكود + تصميم Fable (البلوكات المشتركة، والبيانات، والشاشة v2) · التنفيذ على moonui3</p>
</div></body></html>'''
open(OUT, 'w', encoding='utf-8').write(html)
print(f'built {len(html)} bytes → {os.path.normpath(OUT)}')
