#!/usr/bin/env sh
# TODO: This needs to be tested and also handle errors more effectively.

NETWORK_NAME="default"
MOUNTPOINT_PARENT="${HOME}/src"
REMOTE_DIRECTORY="/home/lumia/src/"

if [ "$1" = "-u" ]; then
    vm_name="$2"
    mountpoint="${MOUNTPOINT_PARENT}/${vm_name}.vm"
    # TODO: Print some messages here.

    if mount | grep -q "on ${mountpoint} "; then
        fusermount -u "${mountpoint}"
    fi

    if virsh list | grep -q " ${vm_name} "; then
        virsh destroy "${vm_name}"
    fi

    if [ -d "${mountpoint}" ]; then
        rmdir "${mountpoint}"
    fi

else
    vm_name="$1"
    mountpoint="${MOUNTPOINT_PARENT}/${vm_name}.vm"

    if [ "$(virsh list | grep " ${vm_name} ")" = "" ]; then
        virsh start "${vm_name}"
    fi

    echo "Waiting for ${vm_name} to connect to the network..."
    vm_ip_address=""

    # TODO: Consider using a sleep here?
    while [ "${vm_ip_address}" = "" ]; do
        virsh_line=""
        virsh_line="$(virsh net-dhcp-leases "${NETWORK_NAME}" | grep "${vm_name}") > /dev/null"
        if [ "${virsh_line}" != "" ]; then
            vm_ip_address="$(echo "${virsh_line}" | sed "s/\\( \\)*/\\1/g" | cut -d " " -f6 | cut -d "/" -f1)" 
        fi
    done

    # TODO: Make sure this directory isn't made if the vm fails to start or connect.
    mkdir -p "${mountpoint}"

    # TODO: This needs a better "error" message and a proper timeout.
    echo "Attempting to mount over ssh."
    until sshfs "${vm_ip_address}:${REMOTE_DIRECTORY}" "${mountpoint}"; do
        sleep 3
        echo "An error occurred, retrying."
    done
fi
