#!/bin/bash

NAME=$1

WORK_DIR=`dirname $0`
. /unas/etc/netdrive/storage/env/$NAME

RET=0

success_job(){
    if [ $RET -eq 0 ];then
        export NETDRIVE_MOUNTPOINT=${MOUNTPOINT}
        export NETDRIVE_NAME=${NAME}
        run-parts ${WORK_DIR}/mount.d || :
    fi
}

prepare_mountpoint() {
    if [ ! -d "$1" ];then
        echo Create mountpoint "$1"
        mkdir -p "$1"
    fi
    chattr +i "$1"
}

rclone_env() {
    HOMEOLD="$HOME"
    source /etc/default/useradd
    if echo "$HOME" | grep -qE '^/mnt/' && [ -d "$HOME" ];then
        export RCLONE_CACHE_DIR="$HOME/.unas/apps/rclone/cache"
        if [ ! -d "$RCLONE_CACHE_DIR" ];then
            mkdir -p "$RCLONE_CACHE_DIR"
        fi
    fi
    HOME="$HOMEOLD"
    export RCLONE_VFS_CACHE_MODE=writes
    export RCLONE_VFS_CACHE_MAX_AGE=12h
    export RCLONE_VFS_CACHE_MAX_SIZE=10G
    export RCLONE_VFS_CACHE_MIN_FREE_SPACE=256M
}

case "$NETDRIVE_TYPE" in
    rclone)
        rclone_env
        rclone lsd -n --config /unas/etc/netdrive/rclone.conf "${RCLONE_NAME}":"${RCLONE_URL}" --no-check-certificate > /dev/null 2>&1
        RET=$?
        if [ $RET -ne 0 ];then
            # Test failed, break
            echo Failed to link to the source
            exit $RET
        fi
        prepare_mountpoint "${RCLONE_MOUNTPOINT}"
        echo Mount "${RCLONE_NAME}":"${RCLONE_URL}" on "${RCLONE_MOUNTPOINT}"
        MOUNTPOINT=${RCLONE_MOUNTPOINT}
        rclone mount --daemon --config /unas/etc/netdrive/rclone.conf --vfs-cache-mode full "${RCLONE_NAME}":"${RCLONE_URL}" "${RCLONE_MOUNTPOINT}" ${RCLONE_MOUNT_ARGS} && success_job
        RET=$?
        ;;
    mount)
        prepare_mountpoint "${MOUNTPOINT}"
        echo Mount "${MOUNT_URL}" on "${MOUNTPOINT}"
        if [ -z "${MOUNT_OPTION}" ];then
            mount -t "${MOUNT_TYPE}" "${MOUNT_URL}" --target "${MOUNTPOINT}" && success_job
        else
            mount -t "${MOUNT_TYPE}" -o ${MOUNT_OPTION} "${MOUNT_URL}" --target "${MOUNTPOINT}" && success_job
        fi
        RET=$?
        ;;
    customize)
        # Abandoned
        prepare_mountpoint "${MOUNTPOINT}"
        # password may be visible in ${MOUNT_URL}
        #echo Mount "${MOUNT_URL}" on "${MOUNTPOINT}"
        echo Mount on "${MOUNTPOINT}"
        ${MOUNT_COMMAND} "${MOUNT_URL}" "${MOUNTPOINT}"
        RET=$?
        ;;
    customize_daemon)
        # The mount command works as daemon, so it is necessary to use sleep to keep systemd.
        prepare_mountpoint "${MOUNTPOINT}"
        # password may be visible in ${MOUNT_URL}
        #echo Mount "${MOUNT_URL}" on "${MOUNTPOINT}"
        echo Mount on "${MOUNTPOINT}"
        ${MOUNT_COMMAND} "${MOUNT_URL}" "${MOUNTPOINT}" && success_job
        RET=$?
        ;;
    *)
        echo Unknown type $NETDRIVE_TYPE
        RET=1
        ;;
esac

exit $RET
