import os
import time
import subprocess
from logger import get_logger

log = get_logger("actions.power")


def handle_server_reboot(payload: dict) -> dict:
    log.info("Initiating system reboot...")
    # 1. Sync filesystems
    try:
        os.sync()
    except AttributeError:
        # os.sync is not available on Windows (which is fine for tests)
        pass
    
    # 2. Wait 2 seconds
    time.sleep(2)

    # 3. Trigger reboot
    try:
        env = {"LC_ALL": "C"}
        subprocess.Popen(["systemctl", "reboot"], shell=False, env=env)
    except Exception as e:
        log.warning("systemctl reboot failed to launch, falling back to reboot command: %s", e)
        try:
            subprocess.Popen(["reboot"], shell=False, env={"LC_ALL": "C"})
        except Exception as ex:
            log.error("Failed to trigger reboot: %s", ex)
            return {"success": False, "error": f"Failed to execute reboot command: {ex}"}

    # Wait for OS shutdown
    log.info("Reboot command triggered, waiting for OS shutdown...")
    time.sleep(30)
    
    # If we are still alive (e.g. reboot failed or in test), return success: True
    return {"success": True, "message": "Reboot command sent"}
