# shellcheck shell=dash

___x_cmd log init display

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

    local subcmd="$1";              shift
    case "$subcmd" in
        -h|--help)                  ___x_cmd help -m display "$@" ; return 0 ;;
        sum)                        ___x_cmd_display_sum "$@" ;;
        info)                       ___x_cmd_display_info "$@" ;;
        ls)                         ___x_cmd_display_ls "$@" ;;
        stat)                       ___x_cmd_display_stat "$@" ;;
        *)                          N=display M="Unknown subcmd -> $subcmd" log:ret:64 ;;
    esac
}

# ── sum: info + ls ───────────────────────────────────────────────
___x_cmd_display_sum(){
    local tty=""
    ___x_cmd_is_stdout2tty && tty=1
    if [ "$tty" ]; then printf "\033[1;37m── Display Info ──\033[0m\n"
    else printf -- "-- Display Info --\n"; fi
    ___x_cmd_display_info "$@"
    printf "\n"
    if [ "$tty" ]; then printf "\033[1;37m── Display List ──\033[0m\n"
    else printf -- "-- Display List --\n"; fi
    ___x_cmd_display_ls "$@"
}

# ── info: detailed display info (key:value) ──────────────────────
___x_cmd_display_info(){
    local fresh=""
    while [ $# -gt 0 ]; do
        case "$1" in --fresh) fresh=1; shift ;; *) break ;; esac
    done
    if ___x_cmd os is darwin; then
        ___x_cmd_display_info_macos "$fresh"
    elif ___x_cmd os is win; then
        ___x_cmd_display_info_win
    else
        ___x_cmd_display_info_linux
    fi
}

___x_cmd_display_info_macos(){
    local fresh="${1:-}"
    local tty=""
    ___x_cmd_is_stdout2tty && tty=1

    local dur="1d"
    [ "$fresh" ] && dur="0s"

    # Text output for basic fields (name, type, resolution, main, mirror, online, connection, auto brightness)
    local out
    out="$(x ccmd "$dur" -- system_profiler SPDisplaysDataType 2>/dev/null | ___x_cmd_cmds_awk -v tty="$tty" -f "$___X_CMD_ROOT_MOD/display/lib/awk/info_macos_text.awk")"
    if [ -n "$out" ]; then
        printf "%s\n" "$out"
    else
        if [ "$tty" ]; then printf "\033[0;90mNo displays found\033[0m\n"
        else printf "No displays found\n"; fi
        return 0
    fi

    # JSON output for extra fields (refresh rate, product ID, vendor ID, serial, pixel resolution, display ID)
    x ccmd "$dur" -- system_profiler SPDisplaysDataType -json 2>/dev/null | ___x_cmd_cmds_awk -v tty="$tty" -f "$___X_CMD_ROOT_MOD/display/lib/awk/info_macos_json.awk"
}

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

    # Try xrandr first
    if ___x_cmd_cmds xrandr >/dev/null 2>&1; then
        local out
        out="$(___x_cmd_cmds xrandr --query 2>/dev/null | ___x_cmd_cmds_awk -v tty="$tty" -f "$___X_CMD_ROOT_MOD/display/lib/awk/info_linux.awk")"
        if [ -n "$out" ]; then
            printf "%s\n" "$out"
            return 0
        fi
    fi

    # Fallback: /sys/class/drm
    if [ -d /sys/class/drm/ ]; then
        local found=0
        local d
        for d in /sys/class/drm/card*/card*/status /sys/class/drm/card*-*/status; do
            [ -f "$d" ] || continue
            local status=""
            read -r status < "$d" 2>/dev/null
            [ "$status" = "connected" ] || continue
            local p="${d%/status}"

            # Try to read EDID for monitor name
            local edid="" vendor="" product="" serial=""
            if [ -f "$p/edid" ]; then
                local edid_hex
                edid_hex="$(___x_cmd_cmds xxd -p "$p/edid" 2>/dev/null | tr -d '\n')"
                if [ ${#edid_hex} -ge 208 ]; then
                    # Extract manufacturer from EDID bytes 8-9
                    local m1 m2 m3
                    m1=$(( 16#${edid_hex:16:2} ))
                    m2=$(( 16#${edid_hex:18:2} ))
                    vendor="$(printf \\$(printf '%03o' $(( (m1 << 1) | (m2 >> 7) )) ))$(printf \\$(printf '%03o' $(( (m2 & 0x7C) >> 2 )) ))$(printf \\$(printf '%03o' $(( (m2 & 0x03) << 3 | (16#${edid_hex:20:2} >> 5) )) ))"
                fi
            fi

            local modes=""
            if [ -f "$p/modes" ]; then
                read -r modes < "$p/modes" 2>/dev/null
            fi

            local name="${p##*/}"
            if [ "$tty" ]; then
                printf "\033[1;36m%-25s\033[0m: %s\n" "display" "$name"
                [ "$vendor" ] && printf "\033[1;36m%-25s\033[0m: %s\n" "vendor" "$vendor"
                [ "$modes" ] && printf "\033[1;32m%-25s\033[0m: %s\n" "mode" "$modes"
                printf "\033[1;32m%-25s\033[0m: %s\n" "status" "$status"
            else
                printf "%-25s: %s\n" "display" "$name"
                [ "$vendor" ] && printf "%-25s: %s\n" "vendor" "$vendor"
                [ "$modes" ] && printf "%-25s: %s\n" "mode" "$modes"
                printf "%-25s: %s\n" "status" "$status"
            fi
            printf "\n"
            found=1
        done
        if [ "$found" -eq 0 ]; then
            if [ "$tty" ]; then printf "\033[0;90mNo displays found\033[0m\n"
            else printf "No displays found\n"; fi
        fi
    fi
}

___x_cmd_display_info_win(){
    ___x_cmd_cmds wmic path Win32_DesktopMonitor get \
        Name,MonitorType,ScreenHeight,ScreenWidth /format:list 2>/dev/null | \
        ___x_cmd_cmds_awk -f "$___X_CMD_ROOT_MOD/display/lib/awk/info_win.awk"
}

# ── ls: compact display table ────────────────────────────────────
___x_cmd_display_ls(){
    local fresh=""
    while [ $# -gt 0 ]; do
        case "$1" in --fresh) fresh=1; shift ;; *) break ;; esac
    done
    if ___x_cmd os is darwin; then
        ___x_cmd_display_ls_macos "$fresh"
    elif ___x_cmd os is win; then
        ___x_cmd_display_ls_win
    else
        ___x_cmd_display_ls_linux
    fi
}

___x_cmd_display_ls_macos(){
    local fresh="${1:-}"
    local tty=""
    ___x_cmd_is_stdout2tty && tty=1

    local dur="1d"
    [ "$fresh" ] && dur="0s"

    local out
    out="$(x ccmd "$dur" -- system_profiler SPDisplaysDataType -json 2>/dev/null | ___x_cmd_cmds_awk -v tty="$tty" -f "$___X_CMD_ROOT_MOD/display/lib/awk/ls_macos.awk")"
    if [ -n "$out" ]; then
        printf "%s\n" "$out"
    else
        if [ "$tty" ]; then printf "\033[0;90mNo displays found\033[0m\n"
        else printf "No displays found\n"; fi
    fi
}

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

    # Try xrandr first
    if ___x_cmd_cmds xrandr --query >/dev/null 2>&1; then
        local out
        out="$(___x_cmd_cmds xrandr --query 2>/dev/null | ___x_cmd_cmds_awk -v tty="$tty" -f "$___X_CMD_ROOT_MOD/display/lib/awk/ls_linux.awk")"
        if [ -n "$out" ]; then
            printf "%s\n" "$out"
            return 0
        fi
    fi

    # Fallback: /sys/class/drm
    if [ -d /sys/class/drm/ ]; then
        if [ "$tty" ]; then
            printf "\033[1;33m%-20s %-30s %-15s %-10s\033[0m\n" "DISPLAY" "TYPE" "RESOLUTION" "STATUS"
        else
            printf "%-20s %-30s %-15s %-10s\n" "DISPLAY" "TYPE" "RESOLUTION" "STATUS"
        fi
        local d
        for d in /sys/class/drm/card*/card*/status /sys/class/drm/card*-*/status; do
            [ -f "$d" ] || continue
            local status=""
            read -r status < "$d" 2>/dev/null
            local p="${d%/status}"
            local name="${p##*/}"
            local modes=""
            [ -f "$p/modes" ] && read -r modes < "$p/modes" 2>/dev/null
            if [ "$tty" ]; then
                printf "\033[1;36m%-20s\033[0m \033[0;90m%-30s\033[0m \033[1;32m%-15s\033[0m \033[1;34m%-10s\033[0m\n" "$name" "" "$modes" "$status"
            else
                printf "%-20s %-30s %-15s %-10s\n" "$name" "" "$modes" "$status"
            fi
        done
    fi
}

___x_cmd_display_ls_win(){
    ___x_cmd_cmds wmic path Win32_DesktopMonitor get \
        Name,MonitorType,ScreenHeight,ScreenWidth /format:list 2>/dev/null | \
        ___x_cmd_cmds_awk -f "$___X_CMD_ROOT_MOD/display/lib/awk/info_win.awk"
}

# ── stat: real-time display status ───────────────────────────────
___x_cmd_display_stat(){
    if ___x_cmd os is darwin; then
        ___x_cmd_display_stat_macos
    elif ___x_cmd os is win; then
        N=display M="stat not supported on Windows" log:ret:1
    else
        ___x_cmd_display_stat_linux
    fi
}

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

    # Try CoreBrightness via Python for brightness/Night Shift
    ___x_cmd_cmds python3 "$___X_CMD_ROOT_MOD/display/lib/py/display_stat.py" "$tty" 2>/dev/null

    # If python failed, show basic info from system_profiler
    if [ $? -ne 0 ]; then
        ___x_cmd_cmds system_profiler SPDisplaysDataType 2>/dev/null | \
            ___x_cmd_cmds_awk -v tty="$tty" -f "$___X_CMD_ROOT_MOD/display/lib/awk/stat_macos.awk"
    fi
}

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

    # Try xrandr for brightness
    if ___x_cmd_cmds xrandr --verbose >/dev/null 2>&1; then
        local out
        out="$(___x_cmd_cmds xrandr --verbose 2>/dev/null | ___x_cmd_cmds_awk -v tty="$tty" -f "$___X_CMD_ROOT_MOD/display/lib/awk/stat_linux.awk")"
        if [ -n "$out" ]; then
            printf "%s\n" "$out"
            return 0
        fi
    fi

    if [ "$tty" ]; then printf "\033[0;90mNo display status available\033[0m\n"
    else printf "No display status available\n"; fi
}
