#!/bin/bash
set -e

if ! id classroom >/dev/null 2>&1; then
    adduser \
        --disabled-password \
        --gecos "" \
        classroom
fi

cat > /home/classroom/.bash_profile <<'PROFILE'
if [ -z "$WAYLAND_DISPLAY" ] && [ "${XDG_VTNR:-}" = "1" ]; then
    exec sway -c /etc/ekklesia-classroom/sway/config
fi
PROFILE

chown classroom:classroom /home/classroom/.bash_profile
chmod 0644 /home/classroom/.bash_profile

chmod 0755 /usr/local/bin/classroom-browser
chmod 0755 /usr/local/bin/classroom-window
chmod 0755 /usr/local/bin/classroom-dvd
chmod 0755 /usr/local/bin/classroom-dvd-css-setup
chmod 0755 /usr/local/bin/classroom-notify-test
chmod 0755 /usr/local/bin/classroom-notifications
chmod 0755 /usr/local/bin/classroom-chrome-setup
chmod 0755 /usr/local/bin/classroom-provision

# Reading the optical drive needs group cdrom. Takes effect at the next
# login, which the OTA reboot provides.
if getent group cdrom >/dev/null 2>&1; then
    adduser classroom cdrom >/dev/null 2>&1 || true
fi

if [ ! -f /etc/ekklesia-classroom/device.conf ]; then
    cat > /etc/ekklesia-classroom/device.conf <<'CONFIG'
# Ekklesia Classroom device configuration

UPDATE_URL=https://updates.riverofglorymn.org
CHANNEL=stable

# Set to true on classrooms that have a DVD drive.
DVD_ENABLED=false

# Size of the dock, clock and notifications, 0.8 to 1.5.
# Larger rooms and larger TVs want a larger number.
UI_SCALE=1.0
CONFIG

    chmod 0644 /etc/ekklesia-classroom/device.conf
fi

# Make the settings discoverable on classrooms installed before they
# existed. Both defaults are what those rooms already do, so nothing
# about their behaviour changes.
if ! grep -q '^DVD_ENABLED=' /etc/ekklesia-classroom/device.conf; then
    cat >> /etc/ekklesia-classroom/device.conf <<'CONFIG'

# Set to true on classrooms that have a DVD drive.
DVD_ENABLED=false
CONFIG
fi

if ! grep -q '^UI_SCALE=' /etc/ekklesia-classroom/device.conf; then
    cat >> /etc/ekklesia-classroom/device.conf <<'CONFIG'

# Size of the dock, clock and notifications, 0.8 to 1.5.
# Larger rooms and larger TVs want a larger number.
UI_SCALE=1.0
CONFIG
fi

systemctl daemon-reload || true

systemctl enable ekklesia-classroom-update.timer || true
systemctl start ekklesia-classroom-update.timer || true

# Google Chrome, and the DVD codecs when the room has a drive, are
# fetched by the provisioning service at the next boot.
#
# Deliberately enabled but not started here. It cannot run during this
# script anyway, because dpkg holds the apt lock throughout. Starting it
# straight afterwards would race the reboot that an OTA update performs
# the moment this install finishes, and an apt run killed by that reboot
# leaves dpkg half-configured. Every OTA reboots, so waiting for the next
# boot costs nothing and cannot corrupt anything.
#
# A failure there must never fail this installation.
systemctl enable ekklesia-classroom-provision.service || true

exit 0
