#!/bin/bash
function choose_from_menu() {
    local prompt="$1" outvar="$2"
    shift
    shift
    local options=("$@") cur=0 count=${#options[@]} index=0
    local esc=$(echo -en "\e")
    printf "$prompt\n"
    while true
    do
        index=0
        for o in "${options[@]}"
        do
            if [ "$index" == "$cur" ]
            then echo -e " >\e[7m$o\e[0m"
            else echo "  $o"
            fi
            index=$(( $index + 1 ))
        done
        read -s -n3 key
        if [[ $key == $esc[A ]]; then
	    cur=$(( $cur - 1 ))
            [ "$cur" -lt 0 ] && cur=0
        elif [[ $key == $esc[B ]]; then
	    cur=$(( $cur + 1 ))
            [ "$cur" -ge $count ] && cur=$(( $count - 1 ))
        elif [[ $key == "" ]]; then
	    break
        fi
        echo -en "\e[${count}A"
    done
    printf -v $outvar "${options[$cur]}"
}

selections=(
'0. Προβολή Χρήστη | git config user.name && git config user.email'
'1. Ορισμός Χρήστη | git config --global user.name && user.email'
'2. Κλωνοποίηση Αποθετηρίου | git clone -b BRANCH URL'
'3. Προβολή status | git status'
'4. Προβολή αλλαγών | git log'
'5. Έλεγχος Αλλαγών σε όλα τα αρχεία Dry Run | git add -A -n'
'6. Προσθήκη Αλλαγών από όλα τα αρχεία Normal Run | git add -A'
'7. Σημείωση αλλαγών για ανέβασμα | git commit -m "Μήνυμα" '
'8. Ανέβασμα Αλλαγών | git push'
'9. Ανανέωση Κώδικα | git pull'
'10. Έξοδος'
)

while :
do
    choose_from_menu "Επιλέξτε:" selected_choice "${selections[@]}"
    case "${selected_choice:0:2}" in
        "0.")
        echo -e "\n-------"
        echo 'Running: git config user.name && git config user.email'
        git config user.name && git config user.email
        echo -e "-------\n"
        ;;
        "1.")
            echo -e "\n-------"
            echo 'Running: git config --global user.name "username" && git config user.email "usr@mail.com"'
            read -p "Εισάγετε το όνομα χρήστη " git_user
            read -p "Εισάγετε το email χρήστη" git_email
            git config --global user.name "$git_user"
            git config --global user.email "$git_email"
            echo -e "-------\n"
            ;;
        "2.")
            echo -e "\n-------"
            echo "Running: git clone -b BRANCH URL"
            read -p "Εισάγετε το BRANCH: " repo_branch
            read -p "Εισάγετε το URL: " repo_url
            git clone -b "$repo_branch" "$repo_url"
            echo -e "-------\n"
            ;;
        "3.")
            echo -e "\n-------"
            echo "Running: git status"
            git status
            echo -e "-------\n"
            ;;
        "4.")
            echo -e "\n-------"
            echo "Running: git log"
            git log
            echo -e "-------\n"
            ;;
        "5.")
            echo -e "\n-------"
            echo "Running: git add -A -n"
            git add -A -n
            echo -e "-------\n"
            ;;
        "6.")
            echo -e "\n-------"
            echo "Running: git add -A"
            git add -A
            echo -e "-------\n"
            ;;
        "7.")
            echo -e "\n-------"
            echo "Running: git commit -m \"Μήνυμα\""
            read -p "Εισάγετε το μήνυμά σας: " message
            git commit -m "$message"
            echo -e "-------\n"
            ;;
        "8.")
            echo -e "\n-------"
            echo "Running: git push"
            git push
            echo -e "-------\n"
            ;;
        "9.")
            echo -e "\n-------"
            echo "Running: git pull"
            git pull
            echo -e "-------\n"
            ;;
        "10")
            break
            ;;
        *) echo "invalid option $REPLY";;
    esac
done
