#!/bin/bash

Info () {
local app
title="Info"
author="Peter Starfinger"
mail="E-Mail: info@die-starfingers.de"
year="2024"
app="$(basename $0)"
msgid="The Starbuntu application
<i>\$app</i>
was written by"
info="$(gettext "$msgid" | (export PATH `envsubst --variables "$msgid"`; envsubst "$msgid"))"

yad --center --fixed --title="$title" --window-icon="info" --image="info" --borders=20 --text="$info"$'\n'$'\n'"$author"$'\n'"$mail"$'\n'$'\n'"$year"$'\n' --text-align=center --selectable-labels --button="OK" &
wunwa "$title" > /dev/null; xdotool key Home key Down
}


[ "$1" = "info" ] && Info && exit 0
param="$@"
lang_dir=$"C"
if [[ ! "$param" =~ \-i|\-u ]]; then
    title=$"Installation"' / '$"User"
    ask=$"&#10;&#9;Shall Starbuntu be installed on a disk&#9;&#10;&#9;or shall a user be created / deleted?&#10;&#10;"
    yad --fixed --title="$title" --window-icon=$HOME/.icons/starbuntu-logo-48.png --image=dialog-question --borders=20 --text="$ask" --button=$"Cancel":2 --button=$"Help":"yelp /usr/share/help/$lang_dir/Starbuntu/starbuntu-apps-details.page#install-user" --button="Info":"$0 info" --button=$"Installation":1 --button=$"User":0
    e_code=$?
    [ $e_code -eq 2 ] && exit 2
    [ $e_code -eq 1 ] && param="-i" || param="-u"
fi

[ "$param" = "-i" ] && install=true || install=false
user=$(whoami)
if [[ "$user" != "root" ]]; then
    if ! $install; then
	gsu "$0 -u"
    else
	gsu --no-error-msg "install-user -i" &
    fi
    exit 0
fi

if $install; then
    dims=$(echo "$(dims)" | head -n 1)
    h_dim=${dims%|*}
    v_dim=${dims#*|}
    while true; do sleep 500; xdotool keydown Shift_L keyup Shift_L; done &
    xdotool sleep 6 mousemove $((h_dim/2)) $((v_dim/2)) mousemove_relative 200 -20 click 1 &
    /usr/lib/systemback/sbsustart systemback gtk+
    title=$"Install Starbuntu"
    wait=$"&#10;&#9;Wait a moment ..."
    yad --center --fixed --title="$title" --window-icon="$HOME/.icons/starbuntu-logo-48.png" --image="dialog-warning" --borders=20 --text="$wait" --no-buttons --close-on-unfocus &
    [ -e "/tmp/linux_drv" ] && rm /tmp/linux_drv
    for d in $(lsblk -o KNAME,FSTYPE | grep ext4 | cut -d\  -f1); do echo -ne "$d\t" >> /tmp/linux_drv; sudo dumpe2fs /dev/$d | grep created | sed 's/       /@/g' | cut -d@ -f2 | cut -d\  -f2-  >> /tmp/linux_drv; done
    IFS=$'\n'
    k=0; for d in $(cat /tmp/linux_drv); do drv[$k]="$(echo "$d" | cut -d$'\t' -f1)"; date_drv[$k]="$(echo "$d" | cut -d$'\t' -f2)"; date_drv[$k]=$(date -d ${date_drv[$k]} +%Y%m%d); date_drv[$k]="${date_drv[$k]}|${drv[$k]}"; ((k++)); done
    date_drv=($(echo "${date_drv[*]}" | sort))
    date="$(echo "${date_drv[*]}" | tail -1 | cut -d\| -f1)"
    [ "$date" != "$(date +%Y%m%d)" ] && [ "$((date+1))" != "$(date +%Y%m%d)" ] && yad --title="$title" --borders=30 --window-icon="$HOME/.icons/starbuntu-logo-48.png" --image="dialog-warning" --text="\n\t<b>No installation\!</b>"  --button="OK" && exit 1
    dev="$(echo "${date_drv[*]}" | tail -1 | cut -d\| -f2)"
    e2label /dev/$dev Starbuntu
    mp="$(udisksctl mount -b /dev/$dev)"
    mp="${mp##* }"
    cd $mp
    rm -r bin lib lib32 lib64 sbin
    ln -sfn /usr/bin bin
    ln -sfn /usr/lib lib
    ln -sfn /usr/lib32 lib32
    ln -sfn /usr/lib64 lib64
    ln -sfn /usr/libx32 libx32
    ln -sfn /usr/sbin sbin
    new_user=$(grep sudo "$mp/etc/group" | cut -d: -f4 | cut -d, -f1)
    new_id=1000
else
    new_user="$(del-add-user)"
    [ -z "$new_user" ] && exit 0
    new_id=$(id -u $new_user)
    mp=""
    title=$"Users and groups"
fi

first_user="$(id -nu 1000)"
info=$"&#9;The data of $first_user are being copied&#10;&#9;to $new_user and then adjusted.&#10;&#10;&#9;Please wait ...&#10;"
ready=$"&#9;&#9;&#9;&#9;Done!&#10;&#10;&#9;Please remove any private data of $first_user&#10;&#9;from the home folder of $new_user!&#10;"
yad --center --fixed --title="$title" --window-icon="$HOME/.icons/starbuntu-logo-48.png" --image="info" --borders=20 --text="$info" --no-buttons --close-on-unfocus &
[ ! -d "$mp/media/$new_user" ] && mkdir $mp/media/$new_user && chown $new_id:$new_id $mp/media/$new_user
[ ! -d "$mp/mnt/$new_user" ] && mkdir $mp/mnt/$new_user && chown $new_id:$new_id $mp/mnt/$new_user
if ! $install || [ ! -d "$mp/home/$new_user/Downloads" ]; then
    cd /home/$first_user
    find .[a-zA-Z0-9]* ! -path *thumbnails* ! -path *cache* ! -path *evolution* ! -path *google-chrome* ! -path *local/share/* -or -path *local/share/applications* -or -path *local/share/clipboard* -or -path *local/share/desktop-directories* -or -path *local/share/Trash* | xargs -d '\n' cp -d --parents -t $mp/home/$new_user/ 2>/dev/null
fi
cd $mp/home/$new_user
cp -r /home/$first_user/$"Desktop" .
echo -n "" > .config/gtk-3.0/recent.history.bak
echo -n "" > .config/gtk-3.0/recent.history
echo -n "" > .config/gtk-3.0/search.history
rm .bash_history .sh_history
echo "Developer of Starbuntu:" > .local/share/clipboard/primary
echo "Peter Starfinger" > .local/share/clipboard/secondary
echo "info@die-starfingers.de" > .local/share/clipboard/tertiary
mkdir .local/share/Trash/files .local/share/Trash/info
cp /usr/share/sddm/faces/root.face.icon ./.face.icon
chown $new_id:$new_id ./.face.icon
setfacl -m u:sddm:x ./; setfacl -m u:sddm:r ./.face.icon
usermod -a -G input,plugdev $new_user

if $install; then
    find $mp/usr/share/sddm/faces -name *.icon* ! -name root.* | xargs rm
    sed -i /100[^{:0}]/d $mp/etc/group
    if [ -d "$mp/etc/grub.d.mbr" ]; then
	rm -r $mp/etc/grub.d.mbr
	rm $mp/etc/grub.d
	mv $mp/etc/grub.d.part $mp/etc/grub.d
    fi
    [ ! -d "$mp/boot/efi" ] && mkdir $mp/boot/efi
fi
lang=$(grep "LANGUAGE=" /home/$first_user/.profile)
eval "$lang"
if [ ! -d "Downloads" ]; then
    for d in Documents Downloads Multimedia Pictures Urls; do
	mkdir $(gettext "$d")
    done
    for d in Music Videos; do
	mkdir Multimedia/$(gettext "$d")
    done
    mkdir $(gettext "Documents")/$(gettext "Calendar") Multimedia/MediathekView Multimedia/MuseScore
    cp -r /home/$first_user/$"Documents"/$"Calendar"/* $(gettext "Documents")/$(gettext "Calendar")
fi
find $(gettext "Documents")/$(gettext "Calendar") -name $"Appointment Calendar"* ! -name "*-Template.ods" | xargs rm
find .config/gtk-3.0 -name "*.lst*" ! -name "volume.lst" -or -name "*.history*" ! -name ".history" -or -name "orrc*" | xargs rm
find .config/rox.sourceforge.net/ROX-Filer -name "marked-directories.*" -or -name "open-with.*" | xargs rm
# rm .face .face.icon
rm -r .cache/evolution
rm -r .config/evolution
rm -r .local/share/evolution
rm -r .cache/google-chrome
rm -r .config/google-chrome
line="$(grep DEFAULT_WEB_PAGE /home/$first_user/.config/openbox/environment)"
line="$(echo ${line//\"/\\\"})" # }"
sed -i "s|$line|export DEFAULT_WEB_PAGE=\"https://duckduckgo.com/lite\"|" .config/openbox/environment
present_date=$(date --rfc-3339=date)\ 0
sed -i "s/SET_LANG=false/SET_LANG=true BOOT=true/" .config/openbox/environment
# sed -i "s/DOWNLOADED=.*/DOWNLOADED=\"$present_date\"/" /etc/environment
su $first_user -c "dconf dump / > ~/dconf.txt 2>/dev/null"
mv /home/$first_user/dconf.txt .
if ! $install; then
    find . -type f -not -name "*:*" | xargs file --mime-type "*" | grep 'text/' | cut -d: -f1 | xargs grep -l $first_user | xargs sed -i "s/$first_user/$new_user/g"
    sleep 0.1
    IFS=$'\n'
    link_list=($(find . -type l))
    for l in ${link_list[@]}; do ln -sfn $(readlink "$l" | sed "s/\/$first_user/\/$new_user/g") "$l"; done
fi
chown -Rh $new_id:$new_id .
chown 0:0 .fehbg
yad --center --title="$title" --fixed --window-icon="$HOME/.icons/starbuntu-logo-48.png" --image="dialog-warning" --borders=20 --text="$ready" --button="OK"
if $install; then
    if [ ! -e "$mp/root/.gtkrc-2.0" ]; then
	cd /root
	find .[a-zA-Z0-9]* ! -path *thumbnails* ! -path *cache* ! -path *google-chrome* ! -path *local/share/* -or -path *local/share/applications* -or -path *local/share/desktop-directories* -or -path *local/share/Trash* -or -path *local/share/zeitgeist* | xargs -d '\n' cp -d --parents -t $mp/root/ 2>/dev/null
	mkdir .local/share/Trash/files .local/share/Trash/info 
    fi
    echo -n "" > $mp/root/.config/gtk-3.0/recent.history.bak
    echo -n "" > $mp/root/.config/gtk-3.0/recent.history
    echo -n "" > $mp/root/.config/rox.sourceforge.net/ROX-Filer/open-with.history.bak
    echo -n "" > $mp/root/.config/rox.sourceforge.net/ROX-Filer/open-with.history
    rm $mp/root/.config/rox.sourceforge.net/ROX-Filer/marked-directories.*
    rm $mp/root/.bash_history $mp/root/.sh_history
    rm $mp/etc/netplan/*
    rm -r $mp/var/lib/NetworkManager/
    cd
    umount -l /dev/$dev
fi

exit 0
