"""Script generator module — renders PowerShell scripts from Jinja2 templates. Provides render_install() which produces a complete PowerShell install script containing WOW64 guard, UAC self-elevation, pnputil two-step driver staging, idempotent port/printer creation, and Set-PrintConfiguration with duplex mapping. """ from pathlib import Path from jinja2 import Environment, FileSystemLoader _SCRIPTS_DIR = Path(__file__).parent.parent / "templates" / "scripts" _env = Environment( loader=FileSystemLoader(str(_SCRIPTS_DIR)), trim_blocks=True, lstrip_blocks=True, keep_trailing_newline=True, ) _duplex_map = { "OneSided": "OneSided", "LongEdge": "TwoSidedLongEdge", "ShortEdge": "TwoSidedShortEdge", } def render_install( printer_name: str, ip_address: str, port_name: str, driver_name: str, inf_filename: str, duplex_mode: str, color_mode: bool, paper_size: str, collate: bool, ) -> str: """Render install.ps1.j2 with the given printer configuration. Args: printer_name: Display name of the printer. ip_address: IP address for the printer TCP/IP port. port_name: Port name (e.g. "IP_192.168.1.10"). driver_name: Exact driver name as registered in Windows. inf_filename: INF filename inside the drivers/ subfolder. duplex_mode: One of "OneSided", "LongEdge", "ShortEdge" (model values). color_mode: True for color printing, False for mono. paper_size: Paper size string (e.g. "A4", "Letter"). collate: True to enable collation. Returns: Rendered PowerShell script as a string. """ tpl = _env.get_template("install.ps1.j2") return tpl.render( printer_name=printer_name, ip_address=ip_address, port_name=port_name, driver_name=driver_name, inf_filename=inf_filename, duplex_mode=_duplex_map.get(duplex_mode, duplex_mode), color=str(color_mode).lower(), paper_size=paper_size, collate=str(collate).lower(), )