#!/bin/sh

# Définition du chemin vers le fichier PID pour la communication avec le script
path_pid="/tmp/polybar-system-usb-udev.pid"

# Fonction pour mettre à jour les processus liés
usb_update() {
    pid=$(cat "$path_pid")
    if [ "$pid" != "" ]; then
        kill -10 "$pid"
    fi
}

# Fonction pour ouvrir Caja au point de montage du premier périphérique USB monté trouvé
open_mountpoint_in_caja() {
    devices=$(lsblk -Jplno NAME,TYPE,RM,MOUNTPOINT)
    for mount in $(echo "$devices" | jq -r '.blockdevices[] | select(.type == "part") | select(.rm == true) | select(.mountpoint != null) | .mountpoint'); do
        if [ -n "$mount" ]; then
            caja "$mount" &
            break
        fi
    done
}

# Fonction pour afficher les périphériques USB montés et non montés
usb_print() {
    devices=$(lsblk -Jplno NAME,TYPE,RM,SIZE,MOUNTPOINT,VENDOR)
    output=""
    counter=0

    for unmounted in $(echo "$devices" | jq -r '.blockdevices[] | select(.type == "part") | select(.rm == true) | select(.mountpoint == null) | .name'); do
        unmounted=$(echo "$unmounted" | tr -d "[:digit:]")
        unmounted=$(echo "$devices" | jq -r '.blockdevices[] | select(.name == "'"$unmounted"'") | .vendor')
        unmounted=$(echo "$unmounted" | tr -d ' ')
        if [ $counter -eq 0 ]; then
            space=""
        else
            space="   "
        fi
        counter=$((counter + 1))
        output="$output$space#1 $unmounted"
    done

    for mounted in $(echo "$devices" | jq -r '.blockdevices[] | select(.type == "part") | select(.rm == true) | select(.mountpoint != null) | .mountpoint'); do
        label=$(basename "$mounted")
        size=$(echo "$devices" | jq -r '.blockdevices[] | select(.mountpoint == "'"$mounted"'") | .size')
        if [ $counter -eq 0 ]; then
            space=""
        else
            space="   "
        fi
        counter=$((counter + 1))
        output="$output$space$label $size"
    done

    echo "$output"
}

# Traite les arguments passés au script
case "$1" in
    --update)
        usb_print
        ;;
    --open)
        open_mountpoint_in_caja
        ;;
    --unmount)
        devices=$(lsblk -Jplno NAME,TYPE,RM,MOUNTPOINT)
        for unmount in $(echo "$devices" | jq -r '.blockdevices[] | select(.type == "part") | select(.rm == true) | select(.mountpoint != null) | .name'); do
            udisksctl unmount --no-user-interaction -b "$unmount"
            udisksctl power-off --no-user-interaction -b "$unmount"
        done
        usb_update
        ;;
    *)
        echo $$ > $path_pid
        trap exit INT
        trap "echo" USR1
        while true; do
            usb_print
            sleep 60 &
            wait
        done
        ;;
esac

