#!/usr/bin/bash

[ $# -eq 1 ] || exit 1

here=$(dirname "$0")

#shellcheck source=lib/udev/enyx-hfp-udev-functions
. "$here/enyx-hfp-udev-functions"

devpath="/sys$1"
shift

handle_mm() {
    local bus_index
    bus_index=$(find_attr 'enyx_hfp_bus[0-9]*' 'index' "$devpath")

    [ -n "$bus_index" ] || exit 1

    printf "enyx/hfp/bus/%s/mm/0\n" "${bus_index}"
}

handle_generic() {
    local class=$1
    local bus_index
    bus_index=$(find_attr 'enyx_hfp_bus[0-9]*' 'index' "$devpath")
    local channel_id
    channel_id=$(cat "$devpath/channel_id")
    local channel_usage
    channel_usage=$(cat "$devpath/channel_usage")

    [ -n "$bus_index" ] && [ -n "$channel_id" ] || exit 1

    local path_to_dev
    printf -v path_to_dev "enyx/hfp/bus/%s/%s" "${bus_index}" "${class}"
    printf "%s/by-id/%d" "${path_to_dev}" "${channel_id}"
    if [ -n "${channel_usage}" ]; then
        printf " %s/by-usage/%s\n" "${path_to_dev}" "${channel_usage}"
    else
        printf '\n'
    fi
}

case $(basename "$devpath") in
    enyx_hfp_mm[0-9]*)
        handle_mm
        ;;
    enyx_hfp_tx[0-9]*_buffer[0-9]*)
        handle_generic tx_buffer
        ;;
    enyx_hfp_tx[0-9]*_ctrl[0-9]*)
        handle_generic tx_ctrl
        ;;
    enyx_hfp_rx[0-9]*_buffer[0-9]*)
        handle_generic rx_buffer
        ;;
    enyx_hfp_rx[0-9]*_ctrl[0-9]*)
        handle_generic rx_ctrl
        ;;
    enyx_hfp_rx[0-9]*_ptrs[0-9]*)
        handle_generic rx_ptrs
        ;;
    *)
        exit 1
        ;;
esac

