#!/bin/bash

# ================= 配置区 =================
# 注意：这里不再硬编码 /dev/sda1，脚本会自动检测第一个非系统盘的 SATA/USB 设备
TARGET_LABEL="" 
MOUNT_POINT="/videos"
FSTAB_FILE="/etc/fstab"
# ==========================================

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 1. 检查 Root 权限
if [ "$EUID" -ne 0 ]; then
  echo -e "${RED}❌ 权限不足！请使用 sudo 运行此脚本${NC}"
  exit 1
fi

# 2. 自动检测硬盘设备 (智能查找)
# 逻辑：查找名为 sda1, sdb1, sdc1 等且不是根分区的设备
detect_device() {
    # 尝试找 sda1
    if [ -b "/dev/sda1" ] && [ "$(df /dev/sda1 2>/dev/null | tail -1 | awk '{print $NF}')" != "/" ]; then
        echo "/dev/sda1"
        return
    fi
    # 尝试找 sdb1
    if [ -b "/dev/sdb1" ]; then
        echo "/dev/sdb1"
        return
    fi
    # 尝试找 mmcblk 以外的第一个大容量分区 (针对更复杂情况)
    lsblk -ndpo NAME,TYPE,SIZE,MOUNTPOINT | grep -E "part|disk" | grep -v "mmcblk" | head -n 1 | awk '{print $1}'
}

DEVICE=$(detect_device)

if [ -z "$DEVICE" ]; then
    echo -e "${RED}❌ 未检测到可用的外接硬盘设备 (sda1/sdb1 等)。请检查硬件连接。${NC}"
    exit 1
fi

# 3. 获取 UUID (核心步骤)
UUID=$(blkid -s UUID -o value "$DEVICE" 2>/dev/null)

if [ -z "$UUID" ]; then
    echo -e "${RED}❌ 无法获取设备 $DEVICE 的 UUID。可能文件系统损坏或未格式化。${NC}"
    echo "提示：尝试执行 'sudo mkfs.ext4 $DEVICE' 进行格式化 (数据会丢失!)"
    exit 1
fi

# 获取文件系统类型
FS_TYPE=$(blkid -s TYPE -o value "$DEVICE" 2>/dev/null)

echo -e "${GREEN}✅ 检测到设备:${NC} $DEVICE"
echo -e "${GREEN}✅ 文件系统:${NC} $FS_TYPE"
echo -e "${GREEN}✅ UUID:${NC} $UUID"
echo ""

# 4. 确保挂载点目录存在
if [ ! -d "$MOUNT_POINT" ]; then
  echo "正在创建挂载点: $MOUNT_POINT"
  mkdir -p "$MOUNT_POINT"
  chmod 777 "$MOUNT_POINT"
fi

# 5. 菜单界面
echo "=========================================="
echo "    RK3588 硬盘挂载工具"
echo "=========================================="
echo "目标设备: $DEVICE ($FS_TYPE)"
echo "设备 UUID: $UUID"
echo "挂载目录: $MOUNT_POINT"
echo "------------------------------------------"
echo "  1) 立即挂载硬盘 (Mount Now)"
echo "  2) 立即取消挂载 (Unmount Now)"
echo "  3) 开启开机自动挂载 (Enable Auto-Mount via UUID)"
echo "  4) 取消开机自动挂载 (Disable Auto-Mount)"
echo "  5) 查看当前磁盘状态 (Status)"
echo "  6) 退出 (Exit)"
echo "=========================================="
read -p "请输入选项 [1-6]: " choice

case $choice in
  1)
    echo "正在挂载 UUID=$UUID 到 $MOUNT_POINT ..."
    # 使用 UUID 挂载命令
    mount -U "$UUID" "$MOUNT_POINT"
    if [ $? -eq 0 ]; then
        echo -e "${GREEN}✅ 挂载成功！${NC}"
        df -h | grep "$MOUNT_POINT"
    else
        echo -e "${RED}❌ 挂载失败！${NC}"
        echo "可能原因：文件系统类型不支持或需要 fsck 修复。"
        echo "尝试手动修复：sudo fsck -y $DEVICE"
    fi
    ;;
  2)
    echo "正在卸载 $MOUNT_POINT ..."
    umount "$MOUNT_POINT"
    if [ $? -eq 0 ]; then
        echo -e "${GREEN}✅ 卸载成功！${NC}"
    else
        echo -e "${RED}❌ 卸载失败！${NC} 可能有程序正在使用该目录 (如日志写入、视频录制)。"
        echo "提示：使用 'lsof +D $MOUNT_POINT' 查看占用进程。"
    fi
    ;;
  3)
    # 检查 fstab 中是否已经存在该 UUID 的记录
    if grep -q "$UUID" "$FSTAB_FILE"; then
        echo -e "${YELLOW}⚠️ 开机自动挂载已存在 (基于 UUID)，无需重复设置。${NC}"
    else
        # 构造 fstab 行：UUID=xxxx /videos auto defaults,nofail,x-systemd.device-timeout=30 0 2
        FSTAB_ENTRY="UUID=$UUID  $MOUNT_POINT  $FS_TYPE  defaults,nofail,x-systemd.device-timeout=30  0  2"
        
        echo "即将写入配置："
        echo "  $FSTAB_ENTRY"
        read -p "确认写入？(y/n): " confirm
        if [ "$confirm" == "y" ] || [ "$confirm" == "Y" ]; then
            echo "$FSTAB_ENTRY" >> "$FSTAB_FILE"
            echo -e "${GREEN}✅ 开机自动挂载已启用！${NC}"
            
            # 尝试立即应用配置测试
            echo "正在测试配置有效性..."
            umount "$MOUNT_POINT" 2>/dev/null
            if mount -a; then
                echo -e "${GREEN}✅ 配置测试通过，mount -a 执行成功。${NC}"
            else
                echo -e "${RED}⚠️ 警告：mount -a 测试失败，请检查 /etc/fstab 格式。${NC}"
            fi
        else
            echo "操作已取消。"
        fi
    fi
    ;;
  4)
    # 删除包含该 UUID 的行
    if grep -q "$UUID" "$FSTAB_FILE"; then
        sed -i "/$UUID/d" "$FSTAB_FILE"
        echo -e "${GREEN}✅ 开机自动挂载已清理！${NC}"
    else
        echo "未找到该 UUID 的配置记录。"
    fi
    ;;
  5)
    echo "--- 当前磁盘使用情况 ---"
    df -hT | grep -E "Filesystem|$MOUNT_POINT|/dev/sd"
    echo ""
    echo "--- /etc/fstab 内容预览 ---"
    tail -n 5 "$FSTAB_FILE"
    ;;
  6)
    echo "退出脚本。"
    exit 0
    ;;
  *)
    echo -e "${RED}❌ 错误：输入无效。${NC}"
    ;;
esac
