#!/bin/zsh
_DEPENDENCIES+=()
_REQUIRED_ENV+=()
source ${0:a:h}/common.zsh
#####################################################################

_EFS_CONNECT() {
	__GETSUDO || exit 1
	[ ! -d $AWS__EFS__LOCAL_MOUNT_POINT ] && {
		sudo mkdir $AWS__EFS__LOCAL_MOUNT_POINT \
			&& __STATUS "created local mount point '$AWS__EFS__LOCAL_MOUNT_POINT'"
	}

	local FS_ID=$(\
		_AWS efs describe-file-systems \
		| jq -r '.[] | .[] | .FileSystemId' \
		| __FZF 'select a filesystem to mount' \
	)
	[ ! $FS_ID ] && __ABORT

	local MOUNT_POINT="$AWS__EFS__LOCAL_MOUNT_POINT/$FS_ID"
	[ -d "$MOUNT_POINT" ] && sudo rmdir "$MOUNT_POINT" >/dev/null 2>&1
	[ -d "$MOUNT_POINT" ] && {
		__STATUS "$FS_ID is already mounted"
		exit 0
	}

	local MOUNT_TARGETS=$(_AWS efs describe-mount-targets --file-system-id $FS_ID)
	local ZONE=$(\
		echo $MOUNT_TARGETS \
		| jq -r '.[] | .[] | .AvailabilityZoneName' \
		| sort -u | __FZF 'select availability zone'\
	)
	[ ! $ZONE ] && __ABORT

	local MOUNT_IP=$(\
		echo $MOUNT_TARGETS \
		| jq -r ".[] | .[] | select (.AvailabilityZoneName == \"$ZONE\") | .IpAddress" \
		| head -n1 \
	)

	__SUCCESS 'ready to mount!'
	__REMINDER 'your device must be connected to the appropriate VPN'

	__STATUS "file system id    : $FS_ID"
	__STATUS "availability zone : $ZONE"
	__STATUS "file system ip    : $MOUNT_IP"
	__STATUS "local mount point : $MOUNT_POINT"

	__Yn 'proceed?' || __ABORT

	sudo mkdir $MOUNT_POINT \
		&& sudo mount \
			-t nfs4 \
			-o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport \
			$MOUNT_IP:/ \
			"$MOUNT_POINT" \
		&& __SUCCESS "mounted at '$MOUNT_POINT'" \
		|| {
		sudo rmdir $MOUNT_POINT >/dev/null 2>&1
		__FAIL 2 "unable to mount '$FS_ID'"
	}
}

#####################################################################
_EFS_CONNECT