#!/usr/bin/env python3
"""
ES24N IOM Network Configuration Tool — Windows Edition
TrueNAS ES24N Expansion Shelf — Serial Configuration Utility
Based on ES24N Product Service Guide v.26011

Requires: pyserial  (pip install pyserial)
Distributed as a standalone .exe via PyInstaller.

Usage:
    python3 es24n_conf.py   (or run the packaged .exe)

All files in the modules/ subdirectory must be present:
    ui.py, serial_port.py, models.py, redfish.py,
    workflow_serial.py, workflow_firmware.py, workflow_check.py
"""

import os
import sys
import time

# Enable ANSI/VT colour codes on Windows 10+
if sys.platform == "win32":
    import ctypes
    kernel32 = ctypes.windll.kernel32
    kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7)

sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "modules"))

from ui import _c, C, banner, draw_box, ok, warn, prompt
from workflow_check import system_check_workflow
from workflow_firmware import firmware_update_workflow
from workflow_restart import restart_iom_workflow
from workflow_serial import configure_shelf


def main():
    while True:
        banner()
        draw_box([
            f"  {_c(C.BOLD, '1')}  Configure Network Settings",
            f"  {_c(C.BOLD, '2')}  Update IOM / Fabric Card Firmware",
            f"  {_c(C.BOLD, '3')}  Query Current Configuration",
            f"  {_c(C.BOLD, '4')}  Restart IOM",
            f"  {_c(C.BOLD, '5')}  Exit",
        ])
        print()

        choice = prompt("Select [1-5]")
        if choice == "1":
            another = True
            while another:
                another = configure_shelf()
        elif choice == "2":
            firmware_update_workflow()
        elif choice == "3":
            system_check_workflow()
        elif choice == "4":
            restart_iom_workflow()
        elif choice == "5":
            break
        else:
            warn("Please enter 1, 2, 3, 4, or 5.")
            time.sleep(1)

    print()
    ok("Exiting ES24N IOM Configuration Tool. Goodbye.")
    print()


if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print()
        warn("Interrupted. Exiting.")
        sys.exit(0)
