#!/bin/bash

list-git-folder() {
    if [[ -z "$1" ]]; then
        echo '$1/path is empty.'
        exit
    fi
    
    # Define column widths
    local path_width=35
    local url_width=50
    local branch_width=8

    # Print table header
    printf "| %-${path_width}s | %-${url_width}s | %-${branch_width}s |\n" "PATH" "URL" "BRANCH"
    echo "|$(printf '%*s' $((path_width + 2)) '' | tr ' ' '-')|$(printf '%*s' $((url_width + 2)) '' | tr ' ' '-')|$(printf '%*s' $((branch_width + 2)) '' | tr ' ' '-')|"

    local git_folders=$(ls-git-folder "$1")
    for git_folder in $git_folders; do
        local url=$(git config --file .gitmodules --get "submodule.$git_folder.url")
        url=${url#git@github.com:}
        url=${url%.git}
        local branch=$(git -C "$git_folder" branch --show-current 2>/dev/null || echo "detached")
        printf "| %-${path_width}s | %-${url_width}s | %-${branch_width}s |\n" "$git_folder" "$url" "${branch:-detached}"
    done
}
lgf() {
    list-git-folder "$@"
}
