#!/bin/bash
get_path_hierarchy_level() {
    # Desc: Outputs hierarchy level of input paths
    # Example: $ cat lines.txt | get_path_hierarchy_level
    # Input: stdin    str  lines with /-delimited paths
    # Output: stdout  int  hierarchy level of each path
    # Version: 0.0.1

    local line level;
    local flag_root;
    local -a output;

    n=0;
    while read -r line; do
        # Check for mixed absolute/relative paths.
        if [[ $n -le 0 ]] && [[ "$line" =~ ^/ ]]; then
            flag_root=true;
        else
            flag_root=false;
        fi;
        if { [[ "$flag_root" == "true" ]] && [[ ! "$line" =~ ^/ ]]; } || \
           { [[ "$flag_root" == "false" ]] && [[ "$line" =~ ^/ ]]; } then
            echo "FATAL:Mixed relative and absolute paths not supported." 1>&2; return 1;
        fi;
        
        # Squeeze multiple slashes and remove trailing slashes
        line="$(echo "$line" | tr -s '/' | sed 's:/*$::' )";

        # Count the number of slashes to determine hierarchy level
        level="$(echo "$line" | awk -F'/' '{print NF-1}' )";
        if [[ "$flag_root" == "true" ]]; then ((level--)); fi;

        # Append to output
        output+=("$level");
        #declare -p flag_root level; # debug
        ((n++));
    done;
    # Print output
    printf "%s\n" "${output[@]}";
}; # return hierarchy level of lines as integers

# Test the function with the provided lines
printf "\n\n========Test 1========\n"
input_lines=(
    "foo"
    "foo/"
    "foo/bar"
    "foo/bar/"
    "foo/bar///"
    "foo///bar"
    "/foo/bar/baz"
    "/foo/bar/baz/"
    "//foo/bar/baz////"
);

printf "%s\n" "${input_lines[@]}";
printf "========Test 1 results:========\n";
# Convert array to newline-separated string and pass to function
printf "%s\n" "${input_lines[@]}" | get_path_hierarchy_level

printf "\n\n========Test 2========\n"
input_lines=(
    "foo"
    "foo/"
    "foo/bar"
    "foo/bar/"
    "foo/bar///"
    "foo///bar"
    "foo/bar/baz"
    "foo/bar/baz/"
    "foo/bar/baz////"
);

printf "%s\n" "${input_lines[@]}";
printf "========Test 2 results:========\n";
# Convert array to newline-separated string and pass to function
printf "%s\n" "${input_lines[@]}" | get_path_hierarchy_level