# Tue, 11 Nov 2025 10:42:40 +0100
# bash-completion for cpsv

_cpsv_services()
{
    CPSVSRC=$(ls --color=no ${CPSV_SOURCE:-/usr/share/runit/sv.current})
    if [ "$(id -u)" != 0 ] && [ "$(id -u)" -ge '1000' ]; then
        #username="$(id -u -n)"
        for svd in $CPSVSRC ; do
            [ $svd = ${svd%@user} ] && continue
            [ $svd = runsvdir@user ] && continue
            CPSVLIST="$CPSVLIST $svd"
        done
    else
        for svd in $CPSVSRC ; do
            [ $svd = ${svd%@user} ] || continue
            CPSVLIST="$CPSVLIST $svd"
        done
    fi
    echo "$CPSVLIST"
}

_cpsv_names()
{
    CPSVSRC=$(ls --color=no ${CPSV_SOURCE:-/usr/share/runit/sv.current})
    if [ "$(id -u)" != 0 ] && [ "$(id -u)" -ge '1000' ]; then
        #username="$(id -u -n)"
        for svd in $CPSVSRC ; do
            [ $svd = ${svd%@user} ] && continue
            [ $svd = runsvdir@user ] && continue
            CPSVLIST="$CPSVLIST ${svd%@user}"
        done
    else
        for svd in $CPSVSRC ; do
            [ $svd = ${svd%@user} ] || continue
            #TODO multi instances with meta files
            #svd=${svd%default}
            CPSVLIST="$CPSVLIST ${svd%default}"
        done
    fi
    echo "$CPSVLIST"
}

_cpsv_diffs()
{
    if [ "$(id -u)" != 0 ] && [ "$(id -u)" -ge '1000' ]; then
        username="$(id -u -n)"
        CPSVDEST=$(ls --color=no ${CPSV_DEST:-/home/$username/.runit/sv})
        for svd in $CPSVDEST ; do
            CPSVLIST="$CPSVLIST $svd"
        done
    else
        CPSVDEST=$(ls --color=no ${CPSV_DEST:-/etc/sv})
        for svd in $CPSVDEST ; do
            [ $svd = ${svd%@user} ] || continue #?
            CPSVLIST="$CPSVLIST ${svd%default}"
        done
    fi
    echo "$CPSVLIST"
}

_cpsv_commands()
{
    if [ "$(id -u)" != 0 ] && [ "$(id -u)" -ge '1000' ]; then
        echo "d l p s"
    else
        echo "a d l p s"
    fi
}

_cpsv()
{
    cur=${COMP_WORDS[COMP_CWORD]}
    prev=${COMP_WORDS[COMP_CWORD-1]}
    cpsv_com=${COMP_WORDS[1]}
    if [ $COMP_CWORD -eq 1 ]; then
        COMPREPLY=( $( compgen -W "$(_cpsv_commands)" $cur ) )
    elif [ $COMP_CWORD -eq 2 ]; then
        case "$prev" in
            s|l)
                ;;
            a|d|p)
                    COMPREPLY=( $( compgen -W "$(_cpsv_services)" $cur ) )
                ;;
            *)
                ;;
        esac
    elif [ $COMP_CWORD -eq 3 ]; then
        case "$cpsv_com" in
            a) 
                COMPREPLY=( $( compgen -W "$(_cpsv_services)" $cur ) )
                ;;
            d)
                if [ "$(id -u)" != 0 ] && [ "$(id -u)" -ge '1000' ] ; then
                    #COMPREPLY=( $( compgen -W "$(_cpsv_diffs)" ${prev%@user} ) )
                    COMPREPLY=( $( compgen -W "$(_cpsv_diffs)" $cur ) )
                else
                    COMPREPLY=( $( compgen -W "$(_cpsv_diffs)" $cur ) )
                fi
                ;;
            p)
                if [ "$(id -u)" != 0 ] && [ "$(id -u)" -ge '1000' ] ; then
                    COMPREPLY=( $( compgen -W "$(_cpsv_names)" ${prev%@user} ) )
                else
                    #COMPREPLY=( $( compgen -W "$(_cpsv_names)" $cur ) )
                    COMPREPLY=( $( compgen -W "$(_cpsv_names)" ${prev%default} ) )
                fi
                ;;
            s|l|*)
                ;;
        esac
    elif [ $COMP_CWORD -ge 4 ]; then
        case "$cpsv_com" in
            a) 
                COMPREPLY=( $( compgen -W "$(_cpsv_services)" $cur ) )
                ;;
            *)
                ;;
        esac
    fi
}

complete -F _cpsv cpsv
