#!/bin/bash

# ---------------------------------自定义功能模块---------------------------------
module_count_time(){
    # 倒计时120秒后，继续执行挂载操作
    for i in {120..1}; do
        # -ne选项是为了确保不会在echo输出的字符串末尾自动添加换行符， \r是替换当前行，实现在一行刷新显示
        echo -ne "等待 $i 秒后挂载NFS驱动器\r"
        sleep 1
    done
}

module_mount_nfs(){
    # 挂载NFS驱动器,先检查是否已挂载目录，若有则先卸载再挂载。
    MOUNT_POINT="/mnt/nfs"
    NFS_POINT="192.168.0.1:/fs/1001/nfs" # 这里的IP地址需要换成自己的NAS服务器地址，后边的NFS路径也要换成自己的
    # 检测挂载点目录是否存在，挂载点不存在则创建，若挂载点存在并为挂载状态则执行卸载操作
    if [ ! -d "$MOUNT_POINT" ]; then
                echo "挂载点不存在，创建挂载点：$MOUNT_POINT"
                mkdir -p $MOUNT_POINT
    else
        # 循环检测卸载状态，每间隔1秒检测一次，若未卸载，则重新执行一次卸载命令
        while true
        do   
            if mount | grep "on $MOUNT_POINT type" > /dev/null 2>&1; then # 若未挂载，则中断卸载检测
                echo "开始卸载"
                sudo umount $MOUNT_POINT
                sleep 1
            else
                echo "卸载成功。"
                break
            fi
        done
    fi
    # 循环检测是否正确挂载
    while true
    do
        if mount | grep "on $MOUNT_POINT type" > /dev/null 2>&1; then # 若挂载，则中断挂载检测
            echo "挂载成功。"
            break
        else
            echo "开始挂载"
            sudo mount -t nfs $NFS_POINT $MOUNT_POINT
            sleep 1
        fi
    done
}


# ---------------------------------开始检测和启用使用环境---------------------------------
# 检查是否安装nfs-common，用于连接nfs驱动器
if ! apt search nfs-common | grep '已安装' > /dev/null 2>&1; then
    echo "未安装nfs-common组件"
    echo "开始安装..."
    sudo apt install nfs-common
    echo "安装完成。"
fi

# 启动virtualbox vm fnos
# 设置VirtualBox的命令路径，如果不在标准路径下，需要修改此变量
VBOXMANAGE="/usr/bin/VBoxManage"
vm="fnos"
state=$($VBOXMANAGE showvminfo "$vm" --machinereadable | grep "VMState=" | grep -oP '(?<=").*?(?=")')
# 根据状态进行相应的操作
case "$state" in
    "running")
        echo "$vm is running"
        # 处理虚拟机运行中的情况
        module_mount_nfs
        ;;
    "paused")
        echo "$vm is paused"
        # 处理虚拟机暂停的情况
        ;;
    "saved")
        echo "$vm is saved"
        # 处理虚拟机已保存的情况
        ;;
    "aborted")
        echo "$vm is aborted"
        # 处理虚拟机被中止的情况
        ;;
    *)
        echo "$vm is not running"
        # 处理虚拟机未运行的情况
        # 启动虚拟机，再等120秒后，执行后续程序
        VBOXMANAGE startvm "$vm" --type headless > /dev/null 2>&1
        module_count_time
        module_mount_nfs
        ;;
esac

