#!/bin/bash

blockdev=$1
filesystem=$2
mntpath=$3

if [ -z "$blockdev" -o -z "$filesystem" -o -z "$mntpath" ]; then
    echo "error parameter"
    echo "Usage:"$(basename $0)" [device name] [filesystem] [mntpath]"
    echo "Example: mkiscsi sdc vfat /mnt/iscsi/sdc"
    exit 1
fi

# 创建分区（修改：确保 NTFS 使用 ID 7）
newspace() {
    local usage='usage:newspace [device] [partition number] [space: nM | nG | nT]'
    local cfg=/tmp/disk.new
    if [ -z "$1" -o -z "$2" -o -z "$3" ]; then
        echo $usage
        return 1
    fi
    if [ "$3" = "all" ]; then
        echo -e 'n\np\n'$2'\n\n\n\nt\n'$2'\n7\nw\n' >$cfg
    else
        echo -e 'n\np\n'$2'\n\n'+$3'\n\nt\n'$2'\n7\nw\n' >$cfg
    fi
    fdisk $1 </tmp/disk.new >/var/log/disk.log
    wait $!
    return 0
}

# 删除分区
delspace() {
    local usage='usage:delspace [device] [1-4 | all]'
    local cfg=/tmp/disk.del
    if [ -z "$1" -o -z "$2" ]; then
        echo $usage
        return 1
    fi
    if [ "$2" = "all" ]; then
        echo -e 'd\n1\nd\n2\nd\n3\nd\n4\nw\n' >$cfg
    else
        echo -e 'd\n'$2'\nw\n' >$cfg
    fi
    fdisk $1 </tmp/disk.del >/var/log/disk.log
    wait $!
    return 0
}

# 插入共享目录
addfolder() {
    local folderpath=$1
    if [ -z "$folderpath" ]; then
        echo "usage:$0 [folderpath]"
        return 0
    fi
    local foldername=$(basename $folderpath)
    local device=$(basename $(dirname $folderpath))

    [ ! -d "$folderpath" ] && mkdir -m 777 -p $folderpath
    sleep 1

    tersql -sql "insert into share (foldername,device,mntpath,owner,oplock,hidden,type,description,extend)
                 VALUES('$foldername', '$device', '$folderpath', 'admin', '0', '0', 'LFS', '', '')"

    local folder=$(tersql -sql "select folder_id from share where foldername='$foldername'" -only)
    if [ $? -eq 0 ]; then
        local folderid=$(echo $folder | jq -r .folder_id)
        if [ ! -z "${folderid}" ]; then
            local hash=$(echo "@allusers${folderid}" | md5sum | awk '{print $1}')
            tersql -sql "insert into acl_list (username,folder_id,access,hash) VALUES('@allusers', $folderid, 2, '$hash')"
        fi
    fi
}

debug=/tmp/$blockdev
# 先创建一个占满所有空间的分区
newspace "/dev/${blockdev}" 1 "all"

wait $!
echo formatting >$debug

case $filesystem in
ext3)
    echo "mkfs.ext3 '/dev/${blockdev}1'"
    echo -e "y\n" | mkfs.ext3 "/dev/${blockdev}1"
    ;;
ext4)
    echo "mkfs.ext4 '/dev/${blockdev}1'"
    echo -e "y\n" | mkfs.ext4 "/dev/${blockdev}1"
    ;;
ntfs)
    echo "mkfs.ntfs -f '/dev/${blockdev}1'"
    mkfs.ntfs -f "/dev/${blockdev}1"
    ntfsfix "/dev/${blockdev}1"  # 修复 NTFS 确保 Windows 兼容性
    ;;
vfat)
    echo "mkfs.vfat '/dev/${blockdev}1'"
    mkfs.vfat "/dev/${blockdev}1"
    ;;
esac

echo "format finish" >$debug
echo "mount device" >$debug
echo $mntpath

if [ -d "$mntpath" ]; then
    echo "mount '/dev/${blockdev}1' $mntpath"
    case $filesystem in
    ntfs)
        ntfs-3g "/dev/${blockdev}1" $mntpath
        ;;
    vfat)
        mount -o umask=000 "/dev/${blockdev}1" $mntpath
        ;;
    *)
        mount -o rw "/dev/${blockdev}1" $mntpath
        ;;
    esac
    if [ $? != 0 ]; then
        echo "mount failed" >$debug
    else
        addfolder $mntpath
        chmod -R 777 $mntpath
        ret=$(service samba status | grep running)
        [ "X${ret}" != "X" ] && service samba restart
        echo "successful" >$debug
    fi
fi
