#!/bin/bash

# Get power status for specified port or all ports

source "/usr/share/rpi-power-hat/scripts/hardware-reader.sh"

print_usage() {
	echo "Usage: rpi-power-hat get <port|all>"
	echo
	echo "Ports: B1, B2, T1, T2, all"
	echo
	echo "Examples:"
	echo "  rpi-power-hat get B1        # Check port B1 status"
	echo "  rpi-power-hat get T2        # Check port T2 status"
	echo "  rpi-power-hat get all       # Check all ports status (ALL|A also accepted)"
}

# Get power status (1=ON, 0=OFF)
get_power_status() {
	local port="$1"
	local power_hwmon
	power_hwmon="$(get_power_hwmon_path "$port")"
	
	if [[ -z "$power_hwmon" ]]; then
		echo "Error: Unable to get power monitoring path for port $port" >&2
		return 1
	fi
	
	local power_raw
	power_raw="$(cat "$power_hwmon" 2>/dev/null)"
	if [[ $? -ne 0 ]]; then
		echo "Error: Failed to read power from $power_hwmon" >&2
		return 1
	fi
	
	# If power > 0, port is ON
	if [[ $power_raw -gt 0 ]]; then
		echo "1"
	else
		echo "0"
	fi
}

# Show status for one port
show_status() {
	local port="$1"
	local status
	status="$(get_power_status "$port")"
	
	if [[ $? -ne 0 ]]; then
		return 1
	fi
	
	local power_hwmon
	power_hwmon="$(get_power_hwmon_path "$port")"
	local power_raw
	power_raw="$(cat "$power_hwmon" 2>/dev/null)"
	local power_mw=$((power_raw / 1000))
	
	if [[ "$status" = "1" ]]; then
		echo "$port: ON  (${power_mw}mW)"
	else
		echo "$port: OFF (${power_mw}mW)"
	fi
}

# Show status for all ports
show_all_status() {
	echo "Power Status:"
	echo "============="
	
	for port in B1 B2 T1 T2; do
		show_status "$port"
	done
}

# Main function
main() {
	local port="$1"
	
	if [[ -z "$port" ]] || [[ "$port" = "-h" ]] || [[ "$port" = "--help" ]] || [[ "$port" = "-help" ]]; then
		print_usage
		exit 0
	fi
	
	# Handle 'all' variations
	case "$port" in
		"all"|"ALL"|"A")
			show_all_status
			exit 0
			;;
		*)
			if ! validate_port "$port"; then
				echo "Error: Invalid port '$port'. Valid ports are: $(list_ports)" >&2
				exit 1
			fi
			show_status "$port"
			;;
	esac
}

main "$@"
