#!/bin/bash

. gettext.sh

export TEXTDOMAIN=pardus-boot-repair
export TEXTDOMAINDIR=/usr/share/locale

list_partition(){
    for disk in $(ls /sys/block/* | grep "[0-9]$") ; do
        os=$(search-operating-system | grep $disk | cut -f 1 -d ':' | sed "s/ /-/g")
        echo "$disk ($os)"
    done
}

select_user(){
    timeout 3 mount -o defaults,ro /dev/$disk /mnt
    zenity --list \
           --title="$(eval_gettext "Select user")" \
           --cancel-label="$(eval_gettext "Exit")" \
           --ok-label="$(eval_gettext "Select")" \
           --column="$(eval_gettext "User")" \
           --height=400 --width=400 \
           $(grep -e ":x:[0-9][0-9][0-9][0-9]:" /mnt/etc/passwd | cut -f 1 -d ':') \
           root
    umount /mnt
}

disk=$(zenity --list \
        --title="$(eval_gettext "Select rootfs partition")" \
        --cancel-label="$(eval_gettext "Exit")" \
        --ok-label="$(eval_gettext "Select")" \
        --column="$(eval_gettext "Rootfs partition")" \
        --column="" \
        --height=400 --width=400 \
        $(list_partition) | cut -f 1 -d ' ')
if [[ "$disk" == "" ]] ; then
    exit 0
fi
while true ; do
    selection=$(zenity --list \
        --title="$(eval_gettext "Pardus Boot Repair")" \
        --cancel-label="$(eval_gettext "Exit")" \
        --ok-label="$(eval_gettext "Select")" \
        --column="$(eval_gettext "Action")" --column="$(eval_gettext "Name")" \
        --height=400 --width=400 \
        "grub"       "$(eval_gettext "Reinstall grub")" \
        "password"   "$(eval_gettext "Reset password")" \
        "chroot"     "$(eval_gettext "Open chroot shell")" \
    )
    if [[ "$selection" == "grub" ]] ; then
        mbr=$(zenity --list \
            --title="$(eval_gettext "Select grub disk")" \
            --cancel-label="$(eval_gettext "Exit")" \
            --ok-label="$(eval_gettext "Select")" \
            --column="$(eval_gettext "Grub disk")" \
            --height=400 --width=400 \
            $(ls /sys/block/ | grep -v "loop"))
        if [[ "$mbr" == "" ]] ; then
            exit
        fi
        if [[ -d /sys/firmware/efi/ ]] ; then
            efi=$(zenity --list \
                --title="$(eval_gettext "Select efi partition")" \
                --cancel-label="$(eval_gettext "Exit")" \
                --ok-label="$(eval_gettext "Select")" \
                --column="$(eval_gettext "EFI partition")" \
                --column="" \
                --height=400 --width=400 \
                $(list_partition))
            if [[ "$efi" == "" ]] ; then
                exit
            fi
        fi
        x-terminal-emulator -e "env disk=$disk mbr=$mbr efi=$efi grub-reinstall"
    elif [[ "$selection" == "password" ]] ; then
        user=$(select_user)
        if [[ "$user" != "" ]] ; then
            x-terminal-emulator -e "env user=$user disk=$disk reset-password"
        fi
    elif [[ "$selection" == "chroot" ]] ; then
        xhost +
        user=$(select_user)
        if [[ "$user" != "" ]] ; then
            x-terminal-emulator -e "pardus-chroot /dev/$disk su $user -"
        fi
    else
        exit 0
    fi
done


