"""Build the CNX Vinyl business plan .docx, in its two versions (October 2026). python build_plan.py -> ../CNX-Vinyl-Business-Plan-A.docx and -B.docx python build_plan.py A -> ../CNX-Vinyl-Business-Plan-A.docx python build_plan.py B out.docx -> Plan B to a custom path Plan A (~180M THB) and Plan B (~215M THB) share every chapter; the content modules switch the plan-specific text with plan_variant.pick(). Images are resolved relative to docs/ (the parent of business-plan/). """ from __future__ import annotations import sys from pathlib import Path HERE = Path(__file__).resolve().parent sys.path.insert(0, str(HERE)) from plan_lib import Renderer # noqa: E402 import plan_variant # noqa: E402 import content_a, content_b, content_c # noqa: E402 DOCS = HERE.parent.parent # .../docs VERSION = "draft 0.3, October 2026" def out_path(plan: str) -> Path: return HERE.parent / f"CNX-Vinyl-Business-Plan-{plan}.docx" def main(plan: str = "A", out: Path | None = None) -> Path: plan_variant.PLAN = plan out = out or out_path(plan) r = Renderer(DOCS, header_text=f"CNX Vinyl / Poy Records: Business plan, {plan_variant.label()}, {VERSION}", footer_text="Confidential") r.render(content_a.blocks() + content_b.blocks() + content_c.blocks()) r.save(out) return out if __name__ == "__main__": args = sys.argv[1:] plans = [args.pop(0).upper()] if args and args[0].upper() in ("A", "B") else ["A", "B"] target = Path(args[0]) if args else None for p in plans: print(main(p, target if len(plans) == 1 else None))