#!/bin/bash

. /usr/lib/eole/diagnose.sh
. /usr/lib/eole/ihm.sh

# Load configuration
. /etc/eole/eole-ltsp.conf

IMAGE_DEFAULT="${LTSP_CLIENT_TYPE}_${LTSP_CLIENT_ARCH}"
DEFAULT_TFTPBOOT_DIR="${REPERTOIRE_TFTP}/${IMAGE_DEFAULT}"

spinner(){
    # to use it call a long task, background it and call spinner on it's pid
    # (long_long_task) &
    # spinner $!
    local pid=$1
    local delay=5
    while ps --no-headers --pid "${pid}" > /dev/null 2>&1 ; do
        echo -n '.'
        sleep $delay
    done
    echo
}

BuildImage() {
    IMAGE_NAME=$1
    CONF=$2
    LOG=/var/log/ltsp_build_client-$IMAGE_NAME.log
    printf "Construction de l'image $IMAGE_NAME en cours (patienter, log dans $CONTAINER_PATH_LTSPSERVER$LOG):  "
    IMAGE_DIR=/opt/ltsp/$IMAGE_NAME
    if [ -d $IMAGE_DIR ]; then
        rm -rf $IMAGE_DIR
    fi
    if [ -f $REPERTOIRE_TFTP/$IMAGE_NAME/lts.conf.auto-bak ];then
        rm $REPERTOIRE_TFTP/$IMAGE_NAME/lts.conf.auto-bak
    fi
    if [ -f $REPERTOIRE_TFTP/$IMAGE_NAME/lts.conf ];then
        mv $REPERTOIRE_TFTP/$IMAGE_NAME/lts.conf $REPERTOIRE_TFTP/$IMAGE_NAME/lts.conf.auto-bak
    fi
    if [ -d /etc/xdg/xfce4/kiosk ];then
        rm -rf /etc/xdg/xfce4/kiosk
    fi
    (ltsp-build-client --skipimage --config $CONF > $LOG 2>&1) &
    spinner $!

    if grep -qs " terminée avec succès" $LOG ;then
        cp /usr/share/doc/ltsp-server/examples/lts.conf $REPERTOIRE_TFTP/$IMAGE_NAME/lts.conf >/dev/null 2>&1
        ln -s $REPERTOIRE_TFTP/$IMAGE_NAME/lts.conf $REPERTOIRE_TFTP/default/lts.conf >/dev/null 2>&1
        sed -i 's/LDM_DIRECTX=True/LDM_DIRECTX=False/' $REPERTOIRE_TFTP/$IMAGE_NAME/lts.conf
        sed -i 's/#LOCALDEV=False/LOCALDEV=False/'     $REPERTOIRE_TFTP/$IMAGE_NAME/lts.conf

        # Custom splash screen
        cp /usr/share/backgrounds/gnome/Mirror.jpg $IMAGE_DIR/usr/share/ldm/themes/ltsp/bg.png
        cp /usr/share/pixmaps/eole_logo.png $IMAGE_DIR/usr/share/ldm/themes/ltsp/logo.png
        ltsp-chroot -a $IMAGE_NAME -m update-alternatives --set ldm-theme /usr/share/ldm/themes/ltsp >> $LOG 2>&1

        if [ "${LTSP_CLIENT_TYPE}" = 'thin' ];then
            # Set shortcuts for embeded apps
            /usr/share/eole/sbin/generate_shortcuts
            mkdir /etc/xdg/xfce4/kiosk
            cat << EOF > /etc/xdg/xfce4/kiosk/kioskrc
[xfce4-session]
CustomizeSplash=NONE
CustomizeChooser=NONE
CustomizeLogout=NONE
CustomizeCompatibility=NONE
Shutdown=NONE
CustomizeSecurity=NONE
EOF
        else
            #Enable mount scribe shared dirs upon login
            cat << EOF > $IMAGE_DIR/usr/share/ldm/rc.d/X01-mount-workgroups-fatclient
# in case of fat client we need to mount /home/workgroups and .ftp at login
# it should go *after* X01-localapps

if  boolean_is_true "\$LTSP_FATCLIENT";then
    ftp_dir=\${LDM_HOME%/perso}
    mkdir /home/workgroups
    mkdir \$ftp_dir/.ftp
    sshfs -o "\${follow_home_symlinks}\${disable_hardlink}allow_other,nonempty,ControlPath=\$LDM_SOCKET" "\$LDM_SERVER:/home/workgroups" "/home/workgroups/"
    sshfs -o "\${follow_home_symlinks}\${disable_hardlink}allow_other,nonempty,ControlPath=\$LDM_SOCKET" "\$LDM_SERVER:\$ftp_dir/.ftp" "\$ftp_dir/.ftp"
fi
EOF
            #Shortcuts for scribe shared directories in caja
            cp /etc/X11/Xsession.d/60scribe-xfce4-session $IMAGE_DIR/etc/X11/Xsession.d/60scribe-xfce4-session
        fi

        #Generate image file
        echo
        EchoVert "Génération de l'image $IMAGE_NAME (patienter)"
        ltsp-update-image $IMAGE_DIR

        # un redémarrage est nécessaire pour qu'Eclair soit fonctionnel
        service nbd-server restart
    else
        EchoRouge "Problème de construction de l'image embarquée $IMAGE_NAME"
        exit 1
    fi
    echo
}

ln -snf "${IMAGE_DEFAULT}" "${REPERTOIRE_TFTP}/default"

if [ "$1" = 'reconfigure' ];then
    interactive='False'
else
    interactive='True'
fi

if [ -d $DEFAULT_TFTPBOOT_DIR ]; then
    if Question_ouinon "Voulez-vous re-générer l'image par défaut des clients légers" $interactive 'non' 'warn'; then
        builddefault='oui'
    else
        builddefault='non'
    fi
else
    builddefault='oui'
fi

if [ "${ACTIVER_SECONDE_IMAGE}" = 'oui' ]; then
    IMAGE_SECOND="${LTSP_CLIENT_TYPE_1}_${LTSP_CLIENT_ARCH_1}"
    SECOND_TFTPBOOT_DIR=$REPERTOIRE_TFTP/$IMAGE_SECOND
    if [ -d $SECOND_TFTPBOOT_DIR ]; then
        if Question_ouinon "Voulez-vous re-générer la seconde image des clients légers" $interactive 'non' 'warn'; then
            buildsecond='oui'
        else
            buildsecond='non'
        fi
    else
        buildsecond='oui'
    fi
else
    buildsecond="non"
fi

if [ "$builddefault" = "oui" ]; then
    BuildImage $IMAGE_DEFAULT /etc/ltsp/ltsp-build-client.conf
fi
if [ "$buildsecond" = "oui" ]; then
    BuildImage $IMAGE_SECOND /etc/ltsp/seconde_image.conf
fi
