#!/bin/sh
# 脚本功能：json方式返回 大于某个容量的磁盘挂载点及其大小
. /usr/share/libubox/jshn.sh

get_disk_info() {
    disk_info=$(lsblk | grep disk)
    IFS=$'\n'
    for disk in $(echo -e "$disk_info"); do
        disk_name=$(echo $disk | awk '{print $1}')
        disk_capacity=$(echo $disk | awk '{print $4}')
        json_add_string "$disk_name" "$disk_capacity"
    done
}

get_part_info() {
    part_info=$(lsblk | grep part)
    IFS=$'\n'
    for part in $(echo -e "$part_info"); do
        part_name=$(echo $part | awk '{print $1}')
        part_capacity=$(echo $part | awk '{print $4}')
        json_add_string "$part_name" "$part_capacity"
    done
}

get_mount_point_info() {
    mount_point_info=$(lsblk -o SIZE,MOUNTPOINT | grep -v MOUNTPOINT)
    #filter /rom /overlay [SWAP]
    mount_point_info=$(echo -e "$mount_point_info" | grep -v -E "/rom|/overlay|\[SWAP\]")
    #filter capacity that unit is M or K
    mount_point_info=$(echo -e "$mount_point_info" | grep -v -E "M|K")

    IFS=$'\n'
    #filter start with /mnt
    for mount_point in $(echo -e "$mount_point_info"); do
        mount_point_name=$(echo $mount_point | awk '{print $2}')
        mount_point_capacity=$(echo $mount_point | awk '{print $1}')
        if [ -z "$mount_point_capacity" ] || [ -z "$mount_point_name" ]; then
            continue
        fi

        json_add_string "$mount_point_name/openfogos" "$mount_point_capacity"
    done
}

get_unmounted_info() {
    local min_size=$((1024 * 1024 * 1024))
    local system_disk="/dev/$(lsblk --noheadings --output PKNAME "$(findmnt -n -o SOURCE /rom)")"

    local parts=$(lsblk --noheadings --bytes --list --output PATH,SIZE,TYPE,MOUNTPOINT | grep part | awk -v min_size="${min_size}" '{
    if ($4 == "" && $2 > min_size)
        print $1
    }')
    local disks=$(lsblk --noheadings --bytes --list --output PATH,SIZE,TYPE,MOUNTPOINT | grep disk | awk -v min_size="${min_size}" '{
    if ($4 == "" && $2 > min_size)
        print $1
    }')

    json_add_array "unmounted_info"

    for part in $parts; do
        local part_size="$(echo -e $(lsblk --noheadings --output SIZE "${part}"))"
        json_add_object ""
        json_add_string "path" "${part}"
        json_add_string "size" "${part_size}"
        json_add_string "type" "part"
        json_close_object
    done

    for disk in $disks; do
        local disk_size="$(echo -e $(lsblk --noheadings --output SIZE "${disk}" | awk 'NR==1 {print $1}'))"
        local disk_parts=$(lsblk --noheadings --output NAME,TYPE "${disk}" | awk '$2=="part"')
        if [ -z "${disk_parts}" ]; then
            json_add_object ""
            json_add_string "path" "${disk}"
            json_add_string "size" "${disk_size}"
            json_add_string "type" "disk"
            json_close_object
        fi
    done

    json_close_array
}

json_init
case $1 in
disk)
    get_disk_info
    ;;
part)
    get_part_info
    ;;
mount_point)
    get_mount_point_info
    ;;
unmounted_info)
    get_unmounted_info
    ;;
esac
json_dump
