"""
rebuild_html_report_workflow.py
================================
Generates:
  1. n8n_free_scholar_workflow.json  — complete updated workflow
  2. report_template_preview.html    — open in browser to verify design
"""

import json, base64, os

BASE_DIR     = r"c:\Users\Dr Essam Amin\Downloads\n8n"
MEDIA_DIR    = os.path.join(BASE_DIR, "extracted_media")
WORKFLOW_IN  = os.path.join(BASE_DIR, "n8n_drupal_workflow.json")
WORKFLOW_OUT = os.path.join(BASE_DIR, "n8n_free_scholar_workflow.json")
PREVIEW_OUT  = os.path.join(BASE_DIR, "report_template_preview.html")

def b64(filename):
    path = os.path.join(MEDIA_DIR, filename)
    with open(path, "rb") as f: data = f.read()
    ext  = filename.rsplit(".", 1)[-1].lower()
    mime = "image/png" if ext == "png" else "image/jpeg"
    return f"data:{mime};base64,{base64.b64encode(data).decode('utf-8')}"

try:
    IMG = {
        "walaa":  b64("image1.png"),    # specialist signature (م/سمر نجيب)
        "stamp":  b64("image2.png"),   # Round blue stamp → HEADER col-2 + SIGNATURES CENTER
        "essam":  b64("image3.jpeg"),   # Dr. Essam Amin signature
        "mowla":  b64("image4.jpeg"),   # Dr. Abdel-Mowla signature
        "pmu":    b64("image5.jpeg"),   # Operations Systems Unit square logo → HEADER FAR LEFT
        "uni":    b64("image6.png"),    # Damanhour University circular seal → HEADER FAR RIGHT
    }
    print("✓ Images loaded.")
except Exception as e:
    print(f"✗ Error loading images: {e}"); exit(1)

# ─── CSS (shared between preview and JS template) ────────────────────────────
CSS = """
@import url('https://fonts.googleapis.com/css2?family=Cairo:wght@400;600;700;900&display=swap');
*, *::before, *::after { box-sizing: border-box; }

body {
  font-family: 'Cairo', 'Arial Unicode MS', sans-serif;
  direction: rtl;
  text-align: right;
  font-size: 14px;
  line-height: 1.7;
  color: #000;
  margin: 0;
  padding: 0;
  background: #dde1e9;
}

/* ── Print button bar ── */
.no-print {
  background: #1a3a5c;
  color: #fff;
  padding: 12px 24px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  position: sticky;
  top: 0;
  z-index: 100;
  box-shadow: 0 2px 8px rgba(0,0,0,.3);
}
.no-print h2 { margin: 0; font-size: 15px; font-weight: 700; }
.btn-print {
  background: #fff;
  color: #1a3a5c;
  border: none;
  border-radius: 6px;
  padding: 8px 22px;
  font-family: 'Cairo', sans-serif;
  font-size: 15px;
  font-weight: 700;
  cursor: pointer;
  display: flex;
  align-items: center;
  gap: 8px;
  transition: background .2s, transform .1s;
}
.btn-print:hover { background: #d0e7ff; transform: scale(1.03); }

/* ── A4 Paper ── */
.paper {
  background: #fff;
  width: 210mm;
  min-height: 297mm;
  margin: 24px auto;
  padding: 12mm 15mm 15mm 15mm;
  box-shadow: 0 4px 32px rgba(0,0,0,.2);
  border-radius: 2px;
}

/* ── Header: 3 columns (RTL order: Uni seal | Arabic text | PMU logo) ── */
.hdr-table { width: 100%; border-collapse: collapse; margin-bottom: 0; }
.hdr-table td { border: none; vertical-align: middle; padding: 2px 4px; }

/* Col 1 (FAR RIGHT in RTL): Damanhour University seal */
.hdr-uni { width: 30%; text-align: right; }
.hdr-uni img { display: block; margin-left: auto; }

/* Col 2 (WIDE CENTER): Arabic unit names */
.hdr-center {
  width: 40%;
  text-align: center;
  font-size: 18px;
  font-weight: 900;
  line-height: 1.45;
  color: #000;
}

/* Col 3 (FAR LEFT in RTL): PMU Operations square logo */
.hdr-pmu { width: 30%; text-align: left; }
.hdr-pmu img { display: block; margin-right: auto; }

/* ── Divider ── */
.hdr-divider {
  border: none;
  border-top: 2.5px solid #000;
  margin: 6px 0 0 0;
}

/* ── Document Title ── */
.doc-title {
  text-align: center;
  font-size: 24px;
  font-weight: 900;
  letter-spacing: 16px;
  text-decoration: underline;
  margin: 8px 0 12px 0;
}

/* ── Paragraphs ── */
.para {
  font-size: 13px;
  line-height: 1.85;
  text-align: justify;
  margin-bottom: 10px;
}
.para a, .ltr-link {
  color: #1155cc;
  text-decoration: underline;
  direction: ltr;
  display: inline-block;
  font-family: monospace;
}

/* ── Data Table ──
   RTL: first <td> renders on RIGHT side
   Label (bold, narrow) → RIGHT (first td)
   Value (content)      → LEFT  (second td)
*/
.dt {
  width: 100%;
  border-collapse: collapse;
  margin-bottom: 12px;
  table-layout: fixed;
}
.dt td {
  border: 1.5px solid #111;
  padding: 7px 10px;
  vertical-align: middle;
  line-height: 1.55;
  font-size: 13px;
}
/* Label: RIGHT side (first td in RTL) */
.dt .lbl {
  width: 28%;
  font-weight: 800;
  white-space: nowrap;
  text-align: right;
  background: #fff;
}
/* Value: LEFT side (second td in RTL) */
.dt .val {
  width: 72%;
  text-align: right;
}
/* English title value: force LTR */
.dt .val-en {
  width: 72%;
  direction: ltr;
  text-align: left;
  font-family: 'Arial', 'Helvetica', sans-serif;
  font-weight: 700;
  font-size: 13px;
}

/* ── Reviewer Comments Box ── */
.comments-section { margin: 10px 0; }
.comments-label {
  font-weight: 800;
  font-size: 13px;
  margin-bottom: 4px;
}
.comments-box {
  border: 1.5px solid #111;
  padding: 8px 12px;
  min-height: 48px;
  font-size: 13px;
  line-height: 1.7;
  text-align: justify;
  white-space: pre-wrap;
}

/* ── Signatures ── */
.sigs { width: 100%; border-collapse: collapse; margin-top: 20px; }
.sigs td {
  border: none;
  text-align: center;
  vertical-align: top;
  padding: 4px 6px;
  font-size: 13px;
  line-height: 1.6;
}
.sig-title { font-weight: 800; display: block; margin-bottom: 4px; }
.sig-name  { display: block; margin-top: 4px; }

/* ── Footer ── */
.footer-hr { border: none; border-top: 2px solid #000; margin-top: 18px; margin-bottom: 4px; }
.footer-text { text-align: center; font-size: 10px; color: #000; line-height: 1.7; }
.footer-email { direction: ltr; display: inline-block; color: #1155cc; text-decoration: underline; font-family: monospace; }

/* ══ Print overrides ══ */
@media print {
  @page { size: A4; margin: 10mm 12mm; }
  body  { background: #fff !important; }
  .no-print  { display: none !important; }
  .paper {
    width: 100% !important;
    min-height: auto !important;
    margin: 0 !important;
    padding: 0 !important;
    box-shadow: none !important;
  }
  .hdr-center { font-size: 15pt; }
  .doc-title  { font-size: 18pt; letter-spacing: 12px; }
  .para, .dt td, .sigs td, .comments-box { font-size: 10.5pt; }
  .footer-text { font-size: 8pt; }
}
"""

# ─── HTML body builder ────────────────────────────────────────────────────────
def build_body(
    student_name="", college="", thesis_type="",
    ar_title="", en_title="", check_date="",
    reviewer_comments="",
    pmu_src="", uni_src="", walaa_src="", stamp_src="", essam_src="", mowla_src="",
    is_full_thesis=False,
):
    reviewer_block = ""
    if is_full_thesis and reviewer_comments:
        reviewer_block = f"""
  <!-- Reviewer Comments (full thesis only) -->
  <div class="comments-section">
    <div class="comments-label">ملاحظات المراجع العلمي:</div>
    <div class="comments-box">{reviewer_comments}</div>
  </div>"""

    return f"""
  <!-- Header: 3 columns RTL → Uni seal | Center text | PMU logo -->
  <table class="hdr-table">
    <tr>
      <!-- Col 1: FAR RIGHT in RTL — Damanhour University seal -->
      <td class="hdr-uni">
        <img src="{uni_src}" height="52" alt="شعار جامعة دمنهور">
      </td>
      <!-- Col 2: Center text -->
      <td class="hdr-center">
        وحدة الأنظمة التشغيلية<br>
        وحدة المكتبة الرقمية
      </td>
      <!-- Col 3: FAR LEFT in RTL — PMU square logo -->
      <td class="hdr-pmu">
        <img src="{pmu_src}" height="52" alt="شعار وحدة الأنظمة التشغيلية">
      </td>
    </tr>
  </table>
  <hr class="hdr-divider">

  <!-- Document Title -->
  <div class="doc-title">إفـادة</div>

  <!-- Intro Paragraph -->
  <p class="para">
    تُعد هذه الإفادة توثيقًا لعملية فحص عنوان الرسالة الأكاديمية المقدَّم من الطالب، وذلك للتحقق من عدم تكراره ضمن قاعدة
    بيانات اتحاد مكتبات الجامعات المصرية. يتضمن البيان تفاصيل الطالب، وعنوان الرسالة المقترح، ونتائج البحث في
    السجلات الأكاديمية والمخططات البحثية قيد الدراسة.
  </p>

  <!-- Data Table: label (RIGHT=first td) | value (LEFT=second td) in RTL -->
  <table class="dt">
    <tr>
      <td class="lbl">أسم الطالب</td>
      <td class="val" style="font-weight:800;">{student_name}</td>
    </tr>
    <tr>
      <td class="lbl">الكلية المقيد بها</td>
      <td class="val">{college}</td>
    </tr>
    <tr>
      <td class="lbl">نوع الرسالة الأكاديمية</td>
      <td class="val">{thesis_type}</td>
    </tr>
    <tr>
      <td class="lbl">عنوان الرسالة باللغة العربية</td>
      <td class="val" style="font-weight:800;">{ar_title}</td>
    </tr>
    <tr>
      <td class="lbl">عنوان الرسالة باللغة الإنجليزية</td>
      <td class="val-en">{en_title}</td>
    </tr>
    <tr>
      <td class="lbl">تاريخ فحص العنوان</td>
      <td class="val">{check_date}</td>
    </tr>
  </table>

  <!-- Second Paragraph -->
  <p class="para">
    تُقرّر وحدة المكتبة الرقمية بجامعة دمنهور بأنه تم البحث في قاعدة بيانات اتحاد مكتبات الجامعات المصرية
    (<span class="ltr-link">www.eulc.edu.eg</span>)،
    ولم يُعثر على تسجيل له ضمن الرسائل الجامعية المكتملة أو المخططات البحثية قيد الدراسة.
  </p>
  <p class="para" style="margin-top:-6px;">
    وعليه، تُصدر هذه الإفادة لاستيفاء جميع الإجراءات المطلوبة لدى الجهات المختصة.
  </p>
{reviewer_block}

  <!-- Signatures -->
  <table class="sigs" style="width:100%; border-collapse:collapse; margin-top:20px;">
    <tr>
      <!-- RIGHT in RTL: Specialist & Executive Director stacked -->
      <td style="width:33%; vertical-align:top; text-align:center; padding:5px;">
        <span class="sig-title">المختص</span>
        <img src="{walaa_src}" height="40"
             style="display:block; margin:8px auto 3px; max-width:130px;" alt="توقيع">
        <span class="sig-name" style="margin-bottom:20px; display:block;">م / سمر نجيب</span>
        
        <span class="sig-title">المدير التنفيذي للمكتبة الرقمية</span>
        <img src="{mowla_src}" height="48"
             style="display:block; margin:8px auto 3px; max-width:140px;" alt="توقيع">
        <span class="sig-name">د/ عبد المولى شعبان عرقوب</span>
      </td>
      <!-- CENTER: Operations Systems Unit Stamp -->
      <td style="width:34%; vertical-align:middle; text-align:center; padding:5px;">
        <img src="{stamp_src}" height="120"
             style="display:block; margin:0 auto; max-width:160px;" alt="الختم">
      </td>
      <!-- LEFT in RTL: IT Director -->
      <td style="width:33%; vertical-align:top; text-align:center; padding:5px;">
        <span class="sig-title">مدير وحدة الأنظمة التشغيلية</span>
        <img src="{essam_src}" height="44"
             style="display:block; margin:8px auto 3px; max-width:140px;" alt="توقيع">
        <span class="sig-name">أ.م.د/ عصام حمدي أمين</span>
      </td>
    </tr>
  </table>

  <!-- Footer -->
  <hr class="footer-hr">
  <div class="footer-text">
    <strong>المكتبة الرقمية – وحدة الأنظمة التشغيلية</strong><br>
    مبنى وحدة إدارة مشروعات التطوير (الخدمات الرقمية) – المجمع النظري – منطقة الأبعادية – دمنهور - البحيرة<br>
    للتواصل: <span class="footer-email">dilb.dam@dmu.edu.eg</span>
  </div>
"""

# ─── Full HTML page wrapper ───────────────────────────────────────────────────
def full_page(body_html, student_name=""):
    return f"""<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>إفادة – {student_name}</title>
<style>{CSS}</style>
</head>
<body>
<div class="no-print">
  <h2>📄 تقرير إفادة – وحدة المكتبة الرقمية</h2>
  <button class="btn-print" onclick="window.print()">🖨️ طباعة / حفظ PDF</button>
</div>
<div class="paper">
{body_html}
</div>
</body>
</html>"""

# ─── Write preview ────────────────────────────────────────────────────────────
preview_body = build_body(
    student_name      = "اسراء صلاح مصطفى جمعة",
    college           = "تمريض",
    thesis_type       = "دكتوراه",
    ar_title          = "تأثير التمارين المعتمدة على الكرسي على الأداء البدني، ومخاوف السقوط والوحدة بين كبار السن في مرافق المعيشة المساعدة",
    en_title          = "Effect of Chair-Based Exercises on Physical Performance, Fall Concerns and Loneliness among Older Adults in the Assisted Living Facilities",
    check_date        = "01/06/2026",
    reviewer_comments = "ملاحظات المراجع: العنوان واضح ومناسب، ويُنصح بمراجعة الصياغة الإنجليزية قبل التسجيل النهائي.",
    pmu_src  = IMG["pmu"],
    uni_src  = IMG["uni"],
    walaa_src= IMG["walaa"],
    stamp_src= IMG["stamp"],
    essam_src= IMG["essam"],
    mowla_src= IMG["mowla"],
    is_full_thesis = True,   # show reviewer comments in preview
)
with open(PREVIEW_OUT, "w", encoding="utf-8") as f:
    f.write(full_page(preview_body, "اسراء صلاح مصطفى جمعة"))
print(f"✓ Preview HTML written → {PREVIEW_OUT}")

# ─── JS code for n8n Format Case nodes ───────────────────────────────────────
def get_js_code():
    """
    Single JS function used by ALL three Format Case nodes.
    Detects thesis type at runtime, shows reviewer comments only for full thesis.
    Builds complete HTML, returns { html_report, uuid } for Save HTML Report node.
    """
    def esc(s): return s.replace("\\", "\\\\").replace("`", "\\`")

    walaa_b64 = esc(IMG["walaa"])
    stamp_b64 = esc(IMG["stamp"])
    essam_b64 = esc(IMG["essam"])
    mowla_b64 = esc(IMG["mowla"])
    pmu_b64   = esc(IMG["pmu"])
    uni_b64   = esc(IMG["uni"])

    # CSS as JS string (escape backticks)
    css_esc = CSS.replace("`", "\\`").replace("${", "\\${")

    return f"""// ── Read webhook payload ─────────────────────────────────────────────────
const body         = $json.body || {{}};
const studentName  = (body.data_student_name  || '').trim();
const college      = (body.data_college        || '').trim();
const thesisType   = (body.data_thesis_type    || '').trim();
const arTitle      = (body.document_title      || '').trim();
const enTitle      = (body.data_english_title  || '').trim();
const reviewerCmt  = (body.reviewer_comments   || '').trim();
const uuid         = (body.uuid                || '').trim();

// Is it a full thesis (not title-only)?
const isFullThesis = !(thesisType.toLowerCase().includes('title') ||
                       thesisType.includes('\\u0639\\u0646\\u0648\\u0627\\u0646'));

// Date
const d = new Date();
const checkDate = String(d.getDate()).padStart(2,'0') + '/' +
                  String(d.getMonth()+1).padStart(2,'0') + '/' +
                  d.getFullYear();

// ── Embedded images ───────────────────────────────────────────────────────
const walaa_sig = `{walaa_b64}`;
const stamp     = `{stamp_b64}`;
const essam_sig = `{essam_b64}`;
const mowla_sig = `{mowla_b64}`;
const pmu_logo  = `{pmu_b64}`;
const uni_logo  = `{uni_b64}`;

// ── Reviewer comments block (full thesis only) ────────────────────────────
const reviewerBlock = (isFullThesis && reviewerCmt)
  ? `<div class="comments-section">
      <div class="comments-label">ملاحظات المراجع العلمي:</div>
      <div class="comments-box">${{reviewerCmt}}</div>
    </div>`
  : '';

// ── Full HTML page ────────────────────────────────────────────────────────
const html = `<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>إفادة – ${{studentName}}</title>
<style>{css_esc}</style>
</head>
<body>

<div class="no-print">
  <h2>📄 تقرير إفادة – وحدة المكتبة الرقمية</h2>
  <button class="btn-print" onclick="window.print()">🖨️ طباعة / حفظ PDF</button>
</div>

<div class="paper">

  <!-- HEADER: 3 cols RTL → Uni seal | Center text | PMU logo -->
  <table class="hdr-table">
    <tr>
      <td class="hdr-uni">
        <img src="${{uni_logo}}" height="52" alt="شعار جامعة دمنهور" style="display:block;margin-left:auto;">
      </td>
      <td class="hdr-center">
        وحدة الأنظمة التشغيلية<br>وحدة المكتبة الرقمية
      </td>
      <td class="hdr-pmu">
        <img src="${{pmu_logo}}" height="52" alt="شعار وحدة الأنظمة التشغيلية" style="display:block;margin-right:auto;">
      </td>
    </tr>
  </table>
  <hr class="hdr-divider">

  <div class="doc-title">إفـادة</div>

  <p class="para">
    تُعد هذه الإفادة توثيقًا لعملية فحص عنوان الرسالة الأكاديمية المقدَّم من الطالب، وذلك للتحقق من عدم تكراره ضمن قاعدة
    بيانات اتحاد مكتبات الجامعات المصرية. يتضمن البيان تفاصيل الطالب، وعنوان الرسالة المقترح، ونتائج البحث في
    السجلات الأكاديمية والمخططات البحثية قيد الدراسة.
  </p>

  <!-- DATA TABLE: label (RIGHT=first td in RTL) | value (LEFT=second td) -->
  <table class="dt">
    <tr>
      <td class="lbl">أسم الطالب</td>
      <td class="val" style="font-weight:800;">${{studentName}}</td>
    </tr>
    <tr>
      <td class="lbl">الكلية المقيد بها</td>
      <td class="val">${{college}}</td>
    </tr>
    <tr>
      <td class="lbl">نوع الرسالة الأكاديمية</td>
      <td class="val">${{thesisType}}</td>
    </tr>
    <tr>
      <td class="lbl">عنوان الرسالة باللغة العربية</td>
      <td class="val" style="font-weight:800;">${{arTitle}}</td>
    </tr>
    <tr>
      <td class="lbl">عنوان الرسالة باللغة الإنجليزية</td>
      <td class="val-en">${{enTitle}}</td>
    </tr>
    <tr>
      <td class="lbl">تاريخ فحص العنوان</td>
      <td class="val">${{checkDate}}</td>
    </tr>
  </table>

  <p class="para">
    تُقرّر وحدة المكتبة الرقمية بجامعة دمنهور بأنه تم البحث في قاعدة بيانات اتحاد مكتبات الجامعات المصرية
    (<span class="ltr-link">www.eulc.edu.eg</span>)،
    ولم يُعثر على تسجيل له ضمن الرسائل الجامعية المكتملة أو المخططات البحثية قيد الدراسة.
  </p>
  <p class="para" style="margin-top:-6px;">
    وعليه، تُصدر هذه الإفادة لاستيفاء جميع الإجراءات المطلوبة لدى الجهات المختصة.
  </p>

  ${{reviewerBlock}}

  <!-- SIGNATURES -->
  <table class="sigs" style="width:100%; border-collapse:collapse; margin-top:20px;">
    <tr>
      <!-- RIGHT in RTL: Specialist & Executive Director stacked -->
      <td style="width:33%; vertical-align:top; text-align:center; padding:5px;">
        <span class="sig-title">المختص</span>
        <img src="${{walaa_sig}}" height="40" style="display:block; margin:8px auto 3px; max-width:130px;" alt="توقيع">
        <span class="sig-name" style="margin-bottom:20px; display:block;">م / سمر نجيب</span>
        
        <span class="sig-title">المدير التنفيذي للمكتبة الرقمية</span>
        <img src="${{mowla_sig}}" height="48" style="display:block; margin:8px auto 3px; max-width:140px;" alt="توقيع">
        <span class="sig-name">د/ عبد المولى شعبان عرقوب</span>
      </td>
      <!-- CENTER: Operations Systems Unit Stamp -->
      <td style="width:34%; vertical-align:middle; text-align:center; padding:5px;">
        <img src="${{stamp}}" height="120" style="display:block; margin:0 auto; max-width:160px;" alt="الختم">
      </td>
      <!-- LEFT in RTL: IT Director -->
      <td style="width:33%; vertical-align:top; text-align:center; padding:5px;">
        <span class="sig-title">مدير وحدة الأنظمة التشغيلية</span>
        <img src="${{essam_sig}}" height="44" style="display:block; margin:8px auto 3px; max-width:140px;" alt="توقيع">
        <span class="sig-name">أ.م.د/ عصام حمدي أمين</span>
      </td>
    </tr>
  </table>

  <hr class="footer-hr">
  <div class="footer-text">
    <strong>المكتبة الرقمية – وحدة الأنظمة التشغيلية</strong><br>
    مبنى وحدة إدارة مشروعات التطوير (الخدمات الرقمية) – المجمع النظري – منطقة الأبعادية – دمنهور - البحيرة<br>
    للتواصل: <span class="footer-email">dilb.dam@dmu.edu.eg</span>
  </div>

</div>
</body>
</html>`;

return [{{ json: {{ html_report: html, uuid: uuid }} }}];"""

# ─── Load & update workflow ───────────────────────────────────────────────────
with open(WORKFLOW_IN, "r", encoding="utf-8") as f:
    wf = json.load(f)

save_report_node = {
    "parameters": {
        "method": "POST",
        "url": "http://10.10.10.49:5000/save_report",
        "sendHeaders": True,
        "headerParameters": {"parameters": [{"name": "Content-Type", "value": "application/json"}]},
        "sendBody": True, "specifyBody": "json",
        "jsonBody": '={{ { uuid: $json.uuid, html: $json.html_report } }}',
        "options": {"allowUnauthorizedCerts": True},
    },
    "id": "a1b2c3d4-0001-0001-0001-a1b2c3d40001",
    "name": "Save HTML Report to Server",
    "type": "n8n-nodes-base.httpRequest",
    "typeVersion": 4,
    "position": [1300, 300],
    "retryOnFail": True, "maxTries": 3, "waitBetweenTries": 3000,
}

new_nodes = []
save_report_injected = False
for node in wf["nodes"]:
    name = node["name"]

    if name == "AI Title Evaluation (Gemini)":
        node = dict(node)
        node["name"]        = "Free Title Checker (Local Python API)"
        node["type"]        = "n8n-nodes-base.httpRequest"
        node["typeVersion"] = 4
        node.pop("credentials", None)
        node["parameters"] = {
            "method": "POST", "url": "http://10.10.10.49:5000/check_title",
            "sendHeaders": True,
            "headerParameters": {"parameters": [{"name": "Content-Type", "value": "application/json"}]},
            "sendBody": True, "specifyBody": "json",
            "jsonBody": "={{ { document_title: $json.body.document_title, data_english_title: $json.body.data_english_title } }}",
            "options": {"allowUnauthorizedCerts": True},
        }
        node.setdefault("retryOnFail", True); node.setdefault("maxTries", 3); node.setdefault("waitBetweenTries", 5000)
        new_nodes.append(node)
    elif name == "Save AI Suggestion in Drupal":
        node["parameters"]["jsonBody"] = '={{ { ai_suggestion_draft: $json.text_report || "لم يتم العثور على نتائج فحص للعنوان" } }}'
        new_nodes.append(node)
    elif name == "Calculate Similarity (JS)":
        continue
    elif name in ("Format Case 1 (Title)", "Format Case 2 (Plag)", "Format Case 3 (Refused)"):
        node["parameters"]["jsCode"] = get_js_code()
        new_nodes.append(node)
        if not save_report_injected:
            new_nodes.append(save_report_node)
            save_report_injected = True
    elif name == "Save Generated Report in Drupal":
        node["parameters"]["jsonBody"] = '={{ { generated_report: $json.url || "" } }}'
        new_nodes.append(node)
    else:
        new_nodes.append(node)

connections = wf.get("connections", {})
connections.pop("AI Title Evaluation (Gemini)", None)
connections.pop("Calculate Similarity (JS)",    None)
connections.pop("Free Title Checker (Local Python API)", None)
if "New Submission or Update?" in connections:
    connections["New Submission or Update?"] = {"main": [
        [{"node": "Free Title Checker (Local Python API)", "type": "main", "index": 0}],
        [{"node": "Route Decision",                        "type": "main", "index": 0}],
    ]}
connections["Free Title Checker (Local Python API)"] = {"main": [[{"node": "Save AI Suggestion in Drupal", "type": "main", "index": 0}]]}
for cn in ("Format Case 1 (Title)", "Format Case 2 (Plag)", "Format Case 3 (Refused)"):
    connections[cn] = {"main": [[{"node": "Save HTML Report to Server", "type": "main", "index": 0}]]}
connections["Save HTML Report to Server"] = {"main": [[{"node": "Save Generated Report in Drupal", "type": "main", "index": 0}]]}

wf["nodes"] = new_nodes
with open(WORKFLOW_OUT, "w", encoding="utf-8") as f:
    json.dump(wf, f, indent=2, ensure_ascii=False)
print(f"✓ Workflow written → {WORKFLOW_OUT}")
print()
print("━" * 65)
print("  Open preview:  report_template_preview.html")
print("  Upload to server: scholar_api.py → /home/portal/scholar_api.py")
print("  Import workflow:  n8n_free_scholar_workflow.json → n8n")
print("━" * 65)
