# shellcheck shell=dash

___x_cmd log init hw

! ___x_cmd_is_suitable_advise_env || xrc:mod:lib hw advise

___x_cmd_hw___main(){
    [ $# -gt 0 ]    ||              set -- sum

    local subcmd="$1";              shift
    case "$subcmd" in
        -h|--help)                  ___x_cmd help -m hw "$@" ; return 0 ;;
        --fresh)                    ___x_cmd_hw_fresh=1 ___x_cmd_hw_sum "$@" ;;
        sum)                        ___x_cmd_hw_sum "$@" ;;
        info)                       ___x_cmd_hw_info "$@" ;;
        ls)                         ___x_cmd_hw_ls "$@" ;;
        *)                          N=hw M="Unknown subcmd -> $subcmd" log:ret:64 ;;
    esac
}

# ── sum: info + ls ───────────────────────────────────────────────
___x_cmd_hw_sum(){
    if ___x_cmd os is darwin; then
        ___x_cmd_hw_sum_macos "$@"
    else
        ___x_cmd_hw_sum_linux "$@"
    fi
}

___x_cmd_hw_sum_macos(){
    local tty=""
    ___x_cmd_is_stdout2tty && tty=1
    local dur="1d"
    [ "$___x_cmd_hw_fresh" ] && dur="0s"

    # --- Core Hardware section ---
    if [ "$tty" ]; then printf "\033[1;37m── Core ──\033[0m\n"
    else printf "-- Core --\n"; fi

    if [ "$tty" ]; then printf "\033[1;33m%-13s %-13s %-30s %s\033[0m\n" "TYPE" "STATUS" "DETAIL" "DEVICE"
    else printf "%-13s %-13s %-30s %s\n" "TYPE" "STATUS" "DETAIL" "DEVICE"; fi

    # CPU (from cpu module)
    ___x_cmd cpu info --simple 2>/dev/null | ___x_cmd_cmds_awk -v tty="$tty" -f "$___X_CMD_ROOT_MOD/hw/lib/awk/core_macos.awk"

    # GPU (from gpu module)
    ___x_cmd gpu info --simple 2>/dev/null | ___x_cmd_cmds_awk -v tty="$tty" -f "$___X_CMD_ROOT_MOD/hw/lib/awk/core_macos.awk"

    # Memory (from free module)
    ___x_cmd free 2>/dev/null | ___x_cmd_cmds_awk -v tty="$tty" -f "$___X_CMD_ROOT_MOD/hw/lib/awk/core_macos.awk"

    # Disk (from disk module stat --simple)
    ___x_cmd disk stat --simple 2>/dev/null | ___x_cmd_cmds_awk -v tty="$tty" -f "$___X_CMD_ROOT_MOD/hw/lib/awk/core_macos.awk"

    # --- Peripherals section ---
    printf "\n"
    if [ "$tty" ]; then printf "\033[1;37m── Peripherals ──\033[0m\n"
    else printf "-- Peripherals --\n"; fi

    x ccmd "$dur" -- system_profiler \
        SPBluetoothDataType \
        SPAudioDataType \
        SPCameraDataType \
        SPCardReaderDataType \
        SPPowerDataType \
        2>/dev/null | LC_ALL=C ___x_cmd_cmds_awk -v mode=sum -v tty="$tty" -f "$___X_CMD_ROOT_MOD/hw/lib/awk/sum_macos.awk"

    # HID (keyboard/trackpad) — fast, no cache needed
    LC_ALL=C ___x_cmd_cmds ioreg -r -c AppleDeviceManagementHIDEventService -l 2>/dev/null | LC_ALL=C ___x_cmd_cmds_awk -v mode=sum -v tty="$tty" -f "$___X_CMD_ROOT_MOD/hw/lib/awk/hid_macos.awk"

    # Thunderbolt — separate call (not cached with the rest to keep it clean)
    x ccmd "$dur" -- system_profiler \
        SPThunderboltDataType \
        2>/dev/null | LC_ALL=C ___x_cmd_cmds_awk -v mode=sum -v tty="$tty" -f "$___X_CMD_ROOT_MOD/hw/lib/awk/tb_macos.awk"

    # --- Network section ---
    printf "\n"
    if [ "$tty" ]; then printf "\033[1;37m── Network ──\033[0m\n"
    else printf "-- Network --\n"; fi

    x ccmd "$dur" -- system_profiler \
        SPNetworkDataType \
        2>/dev/null | LC_ALL=C ___x_cmd_cmds_awk -v mode=sum -v tty="$tty" -f "$___X_CMD_ROOT_MOD/hw/lib/awk/net_macos.awk"
}

___x_cmd_hw_sum_linux(){
    local tty=""
    ___x_cmd_is_stdout2tty && tty=1

    if [ "$tty" ]; then printf "\033[1;37m── Peripherals ──\033[0m\n"
    else printf "-- Peripherals --\n"; fi

    ___x_cmd_cmds_awk -v mode=sum -v tty="$tty" -f "$___X_CMD_ROOT_MOD/hw/lib/awk/sum_linux.awk" /dev/null

    printf "\n"
    if [ "$tty" ]; then printf "\033[1;37m── Network ──\033[0m\n"
    else printf "-- Network --\n"; fi

    ___x_cmd_cmds ip link 2>/dev/null | ___x_cmd_cmds_awk -v tty="$tty" -f "$___X_CMD_ROOT_MOD/hw/lib/awk/net_linux.awk"
}

# ── info: detailed peripheral info ───────────────────────────────
___x_cmd_hw_info(){
    if ___x_cmd os is darwin; then
        ___x_cmd_hw_info_macos "$@"
    else
        ___x_cmd_hw_info_linux "$@"
    fi
}

___x_cmd_hw_info_macos(){
    local tty=""
    ___x_cmd_is_stdout2tty && tty=1
    local dur="1d"
    [ "$___x_cmd_hw_fresh" ] && dur="0s"

    x ccmd "$dur" -- system_profiler \
        SPBluetoothDataType \
        SPAudioDataType \
        SPCameraDataType \
        SPCardReaderDataType \
        SPPowerDataType \
        SPThunderboltDataType \
        2>/dev/null | LC_ALL=C ___x_cmd_cmds_awk -v tty="$tty" -f "$___X_CMD_ROOT_MOD/hw/lib/awk/info_macos.awk"

    LC_ALL=C ___x_cmd_cmds ioreg -r -c AppleDeviceManagementHIDEventService -l 2>/dev/null | LC_ALL=C ___x_cmd_cmds_awk -v mode=info -v tty="$tty" -f "$___X_CMD_ROOT_MOD/hw/lib/awk/hid_macos.awk"
}

___x_cmd_hw_info_linux(){
    local tty=""
    ___x_cmd_is_stdout2tty && tty=1
    ___x_cmd_cmds_awk -v mode=info -v tty="$tty" -f "$___X_CMD_ROOT_MOD/hw/lib/awk/sum_linux.awk" /dev/null
}

# ── ls: compact device listing ───────────────────────────────────
___x_cmd_hw_ls(){
    if ___x_cmd os is darwin; then
        ___x_cmd_hw_ls_macos "$@"
    else
        ___x_cmd_hw_ls_linux "$@"
    fi
}

___x_cmd_hw_ls_macos(){
    local tty=""
    ___x_cmd_is_stdout2tty && tty=1
    local dur="1d"
    [ "$___x_cmd_hw_fresh" ] && dur="0s"

    x ccmd "$dur" -- system_profiler \
        SPBluetoothDataType \
        SPAudioDataType \
        SPCameraDataType \
        SPCardReaderDataType \
        SPPowerDataType \
        SPThunderboltDataType \
        2>/dev/null | LC_ALL=C ___x_cmd_cmds_awk -v tty="$tty" -f "$___X_CMD_ROOT_MOD/hw/lib/awk/ls_macos.awk"

    LC_ALL=C ___x_cmd_cmds ioreg -r -c AppleDeviceManagementHIDEventService -l 2>/dev/null | LC_ALL=C ___x_cmd_cmds_awk -v mode=ls -v tty="$tty" -f "$___X_CMD_ROOT_MOD/hw/lib/awk/hid_macos.awk"
}

___x_cmd_hw_ls_linux(){
    local tty=""
    ___x_cmd_is_stdout2tty && tty=1
    ___x_cmd_cmds_awk -v mode=ls -v tty="$tty" -f "$___X_CMD_ROOT_MOD/hw/lib/awk/ls_linux.awk" /dev/null
}
