"""Generate docs/Demand_Planner_Cikl.docx — minimalist step list with
exact module + menu location per step."""
from pathlib import Path
from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH

OUT = Path(__file__).parent / "docs" / "Demand_Planner_Cikl.docx"
OUT.parent.mkdir(exist_ok=True)


def _safe_save(doc, path):
    """Try to save; if file is open in Word, write to a numbered alt."""
    try:
        doc.save(path)
        return path
    except PermissionError:
        i = 1
        while True:
            alt = path.with_name(f"{path.stem}_v{i}{path.suffix}")
            if not alt.exists():
                break
            i += 1
        doc.save(alt)
        return alt


def title(d, text, sub):
    t = d.add_paragraph()
    t.alignment = WD_ALIGN_PARAGRAPH.CENTER
    r = t.add_run(text); r.bold = True; r.font.size = Pt(22)
    r.font.color.rgb = RGBColor(0x1F, 0x3A, 0x5F)
    s = d.add_paragraph()
    s.alignment = WD_ALIGN_PARAGRAPH.CENTER
    r = s.add_run(sub); r.italic = True; r.font.size = Pt(12)
    r.font.color.rgb = RGBColor(0x55, 0x55, 0x55)
    d.add_paragraph()


def step(d, num, name, module, location, note=""):
    p = d.add_paragraph()
    r = p.add_run(f"{num}. {name}")
    r.bold = True
    r.font.size = Pt(13)
    r.font.color.rgb = RGBColor(0x1F, 0x3A, 0x5F)

    p2 = d.add_paragraph()
    rr = p2.add_run(f"   📍 Modul: ")
    rr.bold = True
    p2.add_run(module)
    p2.add_run("   ·   ")
    rr2 = p2.add_run("Lokacija: ")
    rr2.bold = True
    p2.add_run(location)

    if note:
        p3 = d.add_paragraph()
        rn = p3.add_run("   ↳ ")
        rn.font.color.rgb = RGBColor(0x80, 0x80, 0x80)
        rn2 = p3.add_run(note)
        rn2.italic = True
        rn2.font.color.rgb = RGBColor(0x80, 0x80, 0x80)
    d.add_paragraph()


# ============================================================
d = Document()
style = d.styles["Normal"]
style.font.name = "Calibri"
style.font.size = Pt(11)

title(d, "Demand Planner — koraci ciklusa",
      "Redoslijed punjenja podataka i akcija u jednom S&OP ciklusu")

step(d, 1, "Update sales",
     "📊 Demand",
     "sidebar → Operations → 📥 Update sales",
     "Drop ERP sales export. Engine automatski recalc-a uplift.")

step(d, 2, "Run forecast (prvi)",
     "📊 Demand",
     "sidebar → Operations → 🚀 Run forecast",
     "Generira početni Polleo_Demand_Plan.xlsx bez stock konteksta.")

step(d, 3, "Upload stock",
     "📦 Supply",
     "sidebar → Settings → 📤 Upload data → blok 'WH stock' / 'Store stock (HR/AT/SLO)'",
     "Drop najnoviji stock.csv ili xlsx. Smart prepoznavanje hrvatskih kolona (Šifra, Zaliha).")

step(d, 4, "Upload MOQ (ako ima promjena)",
     "📦 Supply",
     "sidebar → Settings → 📦 MOQ  (ili: Settings → 📤 Upload data → blok 'Supply master')",
     "Samo ako su promjene MOQ ili lead-time-a od dobavljača.")

step(d, 5, "Upload incoming (ako ima promjena)",
     "📦 Supply",
     "sidebar → Settings → 📤 Upload data → blok 'Incoming supply'",
     "Drop incoming_supply.csv s open PO-ovima i ETA tjednom.")

step(d, 6, "Ispisati FA",
     "📊 Demand",
     "sidebar → Projections → 🎯 Forecast accuracy",
     "Pregledaj Global FA tab. Po potrebi 'Re-run backtest' za zadnji tjedan.")

step(d, 7, "Generirati coverage",
     "📦 Supply",
     "sidebar → Workflow → 📊 Coverage workbook",
     "Klik '🔄 Refresh coverage workbook now', download Coverage_W<CW>.xlsx.")

step(d, 8, "Skupiti on-top",
     "📊 Demand",
     "sidebar → Operations → 📨 KAM/CM inputs → tab 🔔 Slack cycle",
     "Distribute templates → wait + nudge → Collect + combine responses.")

step(d, 9, "Run forecast (drugi)",
     "📊 Demand",
     "sidebar → Operations → 🚀 Run forecast",
     "Drugi run uključuje VP/MP on-top iz koraka 8.")

step(d, 10, "Prije S&OE: upload stock",
     "📦 Supply",
     "sidebar → Settings → 📤 Upload data → blok 'WH stock' / 'Store stock'",
     "Najsvježiji stock prije sastanka da Coverage bude live.")

step(d, 11, "Ažurirati coverage",
     "📦 Supply",
     "sidebar → Workflow → 📊 Coverage workbook",
     "Klik '🔄 Refresh coverage workbook now' još jednom — Coverage je sada s "
     "novim stock + novim on-top forecastom.")

# ============================================================
written = _safe_save(d, OUT)
print(f"Generated: {written}  ({written.stat().st_size // 1024} KB)")
