#!/bin/sh

. /lib/partman/lib/base.sh

home_found="unknown"
root_found="unknown"
snapshots_found="unknown"
srv_found="unknown"
tmp_found="unknown"
usr_local_found="unknown"
var_log_found="unknown"

# There is no btrfs fsck
pass=0

for dev in $DEVICES/*; do
    [ -d $dev ] || continue
    cd $dev
    open_dialog PARTITIONS
    while { read_line num id size type fs path name; [ "$id" ]; }; do
        [ $fs != free ] || continue
        [ -f "$id/method" ] || continue
        [ -f "$id/acting_filesystem" ] || continue
        method=$(cat $id/method)
        filesystem=$(cat $id/acting_filesystem)
        mountpoint=$(cat $id/mountpoint)
        case "$filesystem" in
            btrfs)
            [ -f "$id/mountpoint" ] || continue
            # due to #249322, #255135, #258117:
            if [ "$mountpoint" = "/tmp" ]; then
                rm -f $id/options/noexec
            fi
            options=$(get_mountoptions $dev $id)
            if [ "$mountpoint" = "/" ]; then

                # /.snapshots
                if [ "$snapshots_found" = "unknown" ]; then
                    snapshots_options="${options:+$options,}subvol=@.snapshots"
                    snapshots_path="$path"
                    snapshots_mp="${mountpoint}.snapshots"
                    snapshots_found="false"
                fi

                # /home
                if [ "$home_found" = "unknown" ]; then
                    home_options="${options:+$options,}subvol=@home"
                    home_path="$path"
                    home_mp="${mountpoint}home"
                    home_found="false"
                fi

                # /root
                if [ "$root_found" = "unknown" ]; then
                    root_options="${options:+$options,}subvol=@root"
                    root_path="$path"
                    root_mp="${mountpoint}root"
                    root_found="false"
                fi

                # /srv
                if [ "$srv_found" = "unknown" ]; then
                    srv_options="${options:+$options,}subvol=@srv"
                    srv_path="$path"
                    srv_mp="${mountpoint}srv"
                    srv_found="false"
                fi

                # /tmp
                if [ "$tmp_found" = "unknown" ]; then
                    tmp_options="${options:+$options,}subvol=@tmp"
                    tmp_path="$path"
                    tmp_mp="${mountpoint}tmp"
                    tmp_found="false"
                fi

                # /usr/local
                if [ "$usr_local_found" = "unknown" ]; then
                    usr_local_options="${options:+$options,}subvol=@usr@local"
                    usr_local_path="$path"
                    usr_local_mp="${mountpoint}usr/local"
                    usr_local_found="false"
                fi

                # /var/log
                if [ "$var_log_found" = "unknown" ]; then
                    var_log_options="${options:+$options,}subvol=@var@log"
                    var_log_path="$path"
                    var_log_mp="${mountpoint}var/log"
                    var_log_found="false"
                fi

                options="${options:+$options,}subvol=@"


            elif [ "$mountpoint" = "/.snapshots" ]; then
                options="${options:+$options,}subvol=@.snapshots"
                snapshots_found="true"
            elif [ "$mountpoint" = "/home" ]; then
                options="${options:+$options,}subvol=@home"
                home_found="true"
            elif [ "$mountpoint" = "/root" ]; then
                options="${options:+$options,}subvol=@root"
                root_found="true"
            elif [ "$mountpoint" = "/srv" ]; then
                options="${options:+$options,}subvol=@srv"
                srv_found="true"
            elif [ "$mountpoint" = "/tmp" ]; then
                options="${options:+$options,}subvol=@tmp"
                tmp_found="true"
            elif [ "$mountpoint" = "/usr/local" ]; then
                options="${options:+$options,}subvol=@usr@local"
                usr_local_found="true"
            elif [ "$mountpoint" = "/usr" ]; then
                options="${options:+$options,}subvol=@usr"
                usr_local_found="true"
            elif [ "$mountpoint" = "/var/log" ]; then
                options="${options:+$options,}subvol=@var@log"
                var_log_found="true"
            elif [ "$mountpoint" = "/var" ]; then
                options="${options:+$options,}subvol=@var"
                var_log_found="true"
            fi

            echo "$path" "$mountpoint" btrfs $options 0 $pass
            ;;

            *)
            if [ "$mountpoint" = "/.snapshots" ]; then
                snapshots_found="true"
            elif [ "$mountpoint" = "/home" ]; then
                home_found="true"
            elif [ "$mountpoint" = "/root" ]; then
                root_found="true"
            elif [ "$mountpoint" = "/srv" ]; then
                srv_found="true"
            elif [ "$mountpoint" = "/tmp" ]; then
                tmp_found="true"
            elif [ "$mountpoint" = "/usr/local" ]; then
                usr_local_found="true"
            elif [ "$mountpoint" = "/usr" ]; then
                usr_local_found="true"
            elif [ "$mountpoint" = "/var/log" ]; then
                var_log_found="true"
            elif [ "$mountpoint" = "/var" ]; then
                var_log_found="true"
            fi
            ;;
        esac
    done
    close_dialog
done

if [ "$snapshots_found" = "false" ]; then
    echo "$snapshots_path" "$snapshots_mp" btrfs "$snapshots_options" 0 $pass
    snapshots_found="true"
fi
if [ "$home_found" = "false" ]; then
    echo "$home_path" "$home_mp" btrfs "$home_options" 0 $pass
    home_found="true"
fi
if [ "$root_found" = "false" ]; then
    echo "$root_path" "$root_mp" btrfs "$root_options" 0 $pass
    root_found="true"
fi
if [ "$srv_found" = "false" ]; then
    echo "$srv_path" "$srv_mp" btrfs "$srv_options" 0 $pass
    srv_found="true"
fi
if [ "$tmp_found" = "false" ]; then
    echo "$tmp_path" "$tmp_mp" btrfs "$tmp_options" 0 $pass
    tmp_found="true"
fi
if [ "$usr_local_found" = "false" ]; then
    echo "$usr_local_path" "$usr_local_mp" btrfs "$usr_local_options" 0 $pass
    usr_local_found="true"
fi
if [ "$var_log_found" = "false" ]; then
    echo "$var_log_path" "$var_log_mp" btrfs "$var_log_options" 0 $pass
    var_log_found="true"
fi
