#!/bin/bash

INST_PATH=/usr/share/selecthw

. ${INST_PATH}/utils
. ${INST_PATH}/apt-filelist

###############################################################

DISTRO="$(lsb_release -sc)"
CONFDIR=/var/cache/selecthw
REPODIR=/var/www/repos/apt
oldconfig=${CONFDIR}/board

findCPU

if [ ! -d ${REPODIR} ]; then
    Message "There is no local repository."
    Message "Reconfiguration is not possible. Continuing ..." 0 33
    exit 0
fi

if [ -f $oldconfig ]; then
    OLDCPU=$(cat $oldconfig)
else
    mkdir -p ${CONFDIR}
fi

echo -e "\n"

if [ "x$CPU" == "x" ] ; then
    Message "Unknown CPU=${CPU}" 0 31
    Message "aborting..." 0 31
    exit 2
fi

Message "Board Configuration Script" 0 36 1
Message "CPU=$CPU" 0 32
Message "BOARD=$BOARD" 0 32
Message "OLDCPU=$OLDCPU" 0 32

if [ "x$CPU" == "x$OLDCPU" ] ; then
    Message "Reconfiguration is not necessary. Continuing ..." 0 33
    exit 0
fi

_error()
{
    Message "aborting..." 0 31
    rm -f $oldconfig
    exit 2
}

trap _error ERR

APT_QUIET="-qq"
APT_IFLAGS="-y ${APT_QUIET} --reinstall --allow-downgrades -o Dpkg::Progress-Fancy=0"
APT_RFLAGS="-y ${APT_QUIET}"
APT_UFLAGS="-y ${APT_QUIET} --allow-downgrades"

set_local_repo()
{
	Message "Setting local repos..." 0 34
	cp -f ${INST_PATH}/$1/local.list          /etc/apt/sources.list.d
	cp -f ${INST_PATH}/$1/local.pref          /etc/apt/preferences.d
	rm -f /etc/apt/sources.list.d/linode-server.list
	rm -f /etc/apt/preferences.d/linode-server.pref
	rm -f /etc/apt/sources.list
	Message "Updating apt package info..." 0 36
	apt update ${APT_QUIET}
}

set_public_repo()
{
	Message "Setting public repos..." 0 34
	cp -f ${INST_PATH}/sources.list           /etc/apt
	cp -f ${INST_PATH}/$1/linode-server.list  /etc/apt/sources.list.d
	cp -f ${INST_PATH}/$1/linode-server.pref  /etc/apt/preferences.d
	rm -f /etc/apt/sources.list.d/local.list
	rm -f /etc/apt/preferences.d/local.pref
	apt clean
}

set_hostname()
{
	POSTFIX=${CPU:1:2}
	postfix=${POSTFIX,,}
	Message "Setting hostname: ${DISTRO}-dev64${postfix}" 0 34
	cp -f ${INST_PATH}/hosts.in    /etc/hosts
	cp -f ${INST_PATH}/hostname.in /etc/hostname
	sed -i s,@hostname@,${DISTRO}-dev64${postfix},g /etc/hosts
	sed -i s,@hostname@,${DISTRO}-dev64${postfix},g /etc/hostname
	hostname ${DISTRO}-dev64${postfix}
}

case ${OLDCPU} in
    8MQ)
	if [ "x${imx8MQ_r_packages}" != "x" ]; then
		Message "Removing ${OLDCPU} packages" 0 36
		apt purge ${APT_RFLAGS} ${imx8MQ_r_packages}
	fi
    ;;

    8MP)
	if [ "x${imx8MP_r_packages}" != "x" ]; then
		Message "Removing ${OLDCPU} packages" 0 36
		apt purge ${APT_RFLAGS} ${imx8MP_r_packages}
	fi
    ;;

    8MM | 8MN)
	if [ "x${imx8MM_r_packages}" != "x" ]; then
		Message "Removing ${OLDCPU} packages" 0 36
		apt purge ${APT_RFLAGS} ${imx8MM_r_packages}
	fi
    ;;
esac

case ${CPU} in
    8MQ)
	set_local_repo 8MQ
#	Message "Preinstalling packages..." 0 36
#	apt install ${APT_IFLAGS} ${preinstall_packages}
	Message "Installing packages for ${CPU}..." 0 36
	apt install ${APT_IFLAGS} ${imx8MQ_i_packages}
	Message "Upgrading packages" 0 36
	apt upgrade ${APT_UFLAGS}
	set_public_repo 8MQ
	Message "Blacklisting vvcam modules..." 0 34
	cp -f ${INST_PATH}/blacklist-vvcam.conf /etc/modprobe.d/
    ;;

    8MP)
	set_local_repo 8MP
#	Message "Preinstalling packages..." 0 36
#	apt install ${APT_IFLAGS} ${preinstall_packages}
	Message "Installing packages for ${CPU}..." 0 36
	apt install ${APT_IFLAGS} ${imx8MP_i_packages}
	Message "Upgrading packages" 0 36
	apt upgrade ${APT_UFLAGS}
	set_public_repo 8MP
	Message "Enabling vvcam modules..." 0 34
	rm -f /etc/modprobe.d/blacklist-vvcam.conf
	systemctl unmask imx8-isp.service
	systemctl enable imx8-isp.service
    ;;

    8MM | 8MN)
	set_local_repo 8MM
#	Message "Preinstalling packages..." 0 36
#	apt install ${APT_IFLAGS} ${preinstall_packages}
	Message "Installing packages for ${CPU}..." 0 36
	apt install ${APT_IFLAGS} ${imx8MM_i_packages}
	Message "Upgrading packages" 0 36
	apt upgrade ${APT_UFLAGS}
	Message "Blacklisting vvcam modules..." 0 34
	cp -f ${INST_PATH}/blacklist-vvcam.conf /etc/modprobe.d/
	if [ "x${CPU}" == "x8MN" ] ; then
		Message "Removing use-g2d=1 from weston.ini ..." 0 34
		sed "s,use-g2d=1,use-g2d=0,g"  -i /usr/share/weston/ini/weston.1080.ini
		sed "s,use-g2d=1,use-g2d=0,g"  -i /usr/share/weston/ini/weston.2160.ini
		sed "s,use-g2d=1,use-g2d=0,g"  -i /usr/share/weston/ini/weston.800.ini
	fi
	set_public_repo 8MM
    ;;
esac


set_hostname

mkdir -p ${CONFDIR}
echo ${CPU} > $oldconfig

# forcing it to run again
rm -f /var/cache/runonce/00-e2fsresize

sync

trap '' ERR

terminal=/dev/tty1

Countdown "Rebooting in %d seconds... (press any key to abort)" 5 33 $terminal

if [ $? = 0 ]; then
	sync
#	printf "reboot\n"  > $terminal
	reboot
else
    Message "aborting reboot..." 0 31
fi
