#!/bin/bash

set -e

if !  grep -q automatic /proc/cmdline; then
	return 0
fi

automatic=$(get_value automatic-installation)
if [[ "$automatic" == "0" ]]; then
  return 0
fi

data_unformat=$(get_value data-unformat)
if [[ "${data_unformat}" == "true" ]]; then
  return 0
fi

if grep 'kylin-handle-sde' /proc/cmdline; then
	return 0
fi
data_device=$(get_value data-device)
if [[ -n ${data_device} ]]; then
	return 0
fi


handle_data1_disk() {
    disk_num=0
    disk_menu=$(lsblk -d | grep -v NAME | grep -v loop | grep -v sr | awk '{print $1}')
    for i in ${disk_menu}
    do
        disk_remove=$(readlink /sys/block/$i | grep usb)|| true
        if [ -n "${disk_remove}" ]; then
                echo "$i is usb disk"
        else
                disk_num=`expr ${disk_num} + 1`
        fi
    done

    echo ${disk_num}
    if [[ ${disk_num} -ge 2 ]]; then
        echo " DISK number is more than 2"
        disk_num=0
        disk_menu=$(lsblk -d | grep -v NAME | grep -v loop | grep -v sr | awk '{print $1}')
        disk=$(get_value devpath)

        DiskList=`LANG=en_US; sudo fdisk -l | grep -v "${disk}" | awk '{if($1=="Disk" && $2!="identifier:" && $2!="model:") print $2$5}'`
        MAX=2050
        MIN=50
        Size_0=50
        Size_1=50
        Size_2=50

        Ret=

        if echo $DiskList | grep -q 'nvme'; then
                DiskList=`LANG=en_US; sudo fdisk -l | grep -v "${disk}" | awk '{if($1=="Disk" && $2!="identifier:" && $2!="model:") print $2$5}' | grep "nvme"`
        elif echo $DiskList | grep -q 'sd'; then
                DiskList=`LANG=en_US; sudo fdisk -l | grep -v "${disk}" | awk '{if($1=="Disk" && $2!="identifier:" && $2!="model:") print $2$5}' | grep "sd"`
        else
            DiskList=$DiskList
        fi

        num=1
        fdd=1

         for i in $DiskList
         do
                Val=`LANG=en_US; echo $i | cut -d ':' -f 2`
                Val=$[$Val / 1024 / 1024 / 1024]

                Disk=`LANG=en_US; echo $i | cut -d ':' -f 1`

                if [[ `echo "$Val < 35" | bc` -eq 1 ]]; then
                        continue
                fi

                Sd=${Disk##*/}
                fdd=$( cat /sys/block/${Sd}/queue/rotational )
                if [[ $fdd == 0 || $num == 0 ]];then
                        num=0
                        if [[ $fdd == 1 ]];then
                                continue
                        fi
                        if [[ `echo "$Val > $Size_0" | bc` -eq 1 ]]; then
                                 Size_0=$Val
                                 Ret_back=$Disk
                        fi

                        if [[ `echo "$Val >= $MIN" | bc` -eq 1 ]] &&
                           [[ `echo "$Val <= $MAX" | bc` -eq 1 ]] &&
                           [[ `echo "$Val > $Size_2" | bc` -eq 1 ]]; then
                                Size_2=$Val
                                Ret=$Disk
                        fi
                        continue
                fi

                if [[ `echo "$Val > $Size_0" | bc` -eq 1 ]]; then
                         Size_0=$Val
                         Ret_back=$Disk
                fi

                if [[ `echo "$Val >= $MIN" | bc` -eq 1 ]] &&
                [[ `echo "$Val <= $MAX" | bc` -eq 1 ]] &&
                [[ `echo "$Val > $Size_1" | bc` -eq 1 ]]; then
                        Size_1=$Val
                        Ret=$Disk
                fi
         done

         if [ -z $Ret ]; then
		echo "data1 disk unexists"
         else
		data1_partition=$(get_value "data1" | sed 's/\"//g')
        	data1_partition=${data1_partition//;/|}
        	
		fs=
        	fs=$(echo ${data1_partition#*fs=})
        	fs=$(echo ${fs%%|*})

        	size=
        	size=$(echo ${data1_partition#*size=})
        	size=$(echo ${size%%|*})

		mount=
        	mount=$(echo ${data1_partition#*mount=})
        	mount=$(echo ${mount%%|*})
		
		if [[ "${is_efi}" == "false" ]]; then
			
			parted -s "${Ret}" mktable msdos
			if [[ $size == "default" ]]; then
				parted -s "${Ret}" mkpart primary ext4 1MiB 100%
                        else
				parted -s "${Ret}" mkpart primary ext4 1MiB "${size}"MiB
                        fi
			
			partprobe "${Ret}"
                        sync
                        sleep 1

                        umount -l "${Ret}" || true
                        if echo "${Ret}" | grep -q nvme; then
                                Ret=${Ret}p
                        fi
                        Ret=${Ret}1
                        case "$fs" in
                                fat32|fat16)
                                mkfs.vfat -n "data1" "${Ret}";;
                                ext4)
                                mkfs.ext4 -Fq -L "data1" "${Ret}";;
                                xfs)
                                mkfs.xfs -fq -L "data1" "${Ret}";;
                                btrfs)
                                mkfs.btrfs -fq -L "data1" "${Ret}";;
                                ntfs)
                                mkfs.ntfs -fq -L "data1" "${Ret}";;
                                *)
                                mkfs.${fs} -Fq -L "data1" "${Ret}" ||  mkfs.${fs} -fq -L "data1" "${Ret}";;
                        esac

                        if [[ -n ${mount} ]]; then
                                mkdir -p /target${mount}
                                mount "${Ret}" /target${mount}
                        else
                                mkdir -p /target/nomountpoint
                                mount "${Ret}" /target/nomountpoint
                                chmod -R 1777 /target/nomountpoint || true
                                umount -l /target/nomountpoint
                                rmdir /target/nomountpoint
                        fi
		else
			parted -s "${Ret}" mktable gpt
			if [[ $size == "default" ]]; then
				parted -s "${Ret}" mkpart "data1" "${fs}" 1MiB 100%
			else
				parted -s "${Ret}" mkpart "data1" "${fs}" 1MiB "${size}"MiB
			fi
			
			partprobe "${Ret}"
                        sync
                        sleep 1
        		
			umount -l "${Ret}" || true
			if echo "${Ret}" | grep -q nvme; then
  				Ret=${Ret}p
			fi
			Ret=${Ret}1
			case "$fs" in
                		fat32|fat16)
                		mkfs.vfat -n "data1" "${Ret}";;
                		ext4)
                		mkfs.ext4 -Fq -L "data1" "${Ret}";;
                		xfs)
                		mkfs.xfs -fq -L "data1" "${Ret}";;
                		btrfs)
                		mkfs.btrfs -fq -L "data1" "${Ret}";;
                		ntfs)
                		mkfs.ntfs -fq -L "data1" "${Ret}";;
                		*)
                		mkfs.${fs} -Fq -L "data1" "${Ret}" ||  mkfs.${fs} -fq -L "data1" "${Ret}";;
        		esac

        		if [[ -n ${mount} ]]; then
               	 		mkdir -p /target${mount}
                		mount "${Ret}" /target${mount}
        		else
                		mkdir -p /target/nomountpoint
                		mount "${Ret}" /target/nomountpoint
                		chmod -R 1777 /target/nomountpoint || true
                		umount -l /target/nomountpoint
                		rmdir /target/nomountpoint
        		fi

		fi
         fi
    else
	echo "data1 disk unexists"
    fi

}

data1=$(get_value data1)
if [[ -n $data1 ]]; then
	handle_data1_disk 
fi


