#!/bin/bash

# Create user pijuice if it does not exist
if id -u pijuice > /dev/null 2>&1; then
	echo "User pijuice already exists"
else
	echo "Creating user pijuice"
	adduser --quiet --shell /bin/false --home /var/lib/pijuice --disabled-login --gecos "" pijuice
	adduser --quiet pijuice i2c
	# Add default user (usually pi) to the pijuice group
	defuser=`id -un 1000`
	adduser --quiet $defuser pijuice
fi

if [ -d "/var/lib" ]; then
	if [ ! -d "/var/lib/pijuice" ]; then
		mkdir -p /var/lib/pijuice
		echo "pijuice directory created"
	fi
	if [ ! -f "/var/lib/pijuice/pijuice_config.JSON" ]; then
		echo "{\"system_task\":{\"enabled\": true}}" > /var/lib/pijuice/pijuice_config.JSON
		echo "pijuice settings file created"
	fi
else
	echo "Warning: /var/lib does not exist!"
	exit 1
fi

# Create symbolic link in /usr/lib/python3/dist-packages so the pijuice module is found by python 3.x (x > 5)
ln -sf /usr/lib/python3.9/dist-packages/pijuice.py /usr/lib/python3/dist-packages  # Build on Bullseye, Debian 11

echo "Setting ownership and permissions"
chown -R pijuice:pijuice /var/lib/pijuice
chmod 700 /var/lib/pijuice
chmod 600 /var/lib/pijuice/pijuice_config.JSON
# Set owner and suid permission for our pijuice_cli wrapper
chown pijuice:pijuice /usr/bin/pijuice_cli32 /usr/bin/pijuice_cli64
chmod 4755 /usr/bin/pijuice_cli32 /usr/bin/pijuice_cli64
chown pijuice:pijuice /usr/bin/pijuice_cli.py
chmod -x /usr/bin/pijuice_cli.py

# Link to pijuice_cli and pijuiceboot for current architecture
arch=$(dpkg --print-architecture)
if [ "$arch" == "arm64" ]; then
	ln -sf /usr/bin/pijuice_cli64 /usr/bin/pijuice_cli
	ln -sf /usr/bin/pijuiceboot64 /usr/bin/pijuiceboot
else
	ln -sf /usr/bin/pijuice_cli32 /usr/bin/pijuice_cli
	ln -sf /usr/bin/pijuiceboot32 /usr/bin/pijuiceboot
fi

# Enable i2c
set_config_var() {
  lua - "$1" "$2" "$3" <<EOF > "$3.bak"
local key=assert(arg[1])
local value=assert(arg[2])
local fn=assert(arg[3])
local file=assert(io.open(fn))
local made_change=false
for line in file:lines() do
  if line:match("^#?%s*"..key.."=.*$") then
    line=key.."="..value
    made_change=true
  end
  print(line)
end

if not made_change then
  print(key.."="..value)
end
EOF
mv "$3.bak" "$3"
}

if [ ! -f /sys/class/i2c-dev/i2c-1/dev ]; then
    echo "Enabling I2C"
	BLACKLIST=/etc/modprobe.d/raspi-blacklist.conf
	CONFIG=/boot/config.txt
	SETTING=on
	
	set_config_var dtparam=i2c_arm $SETTING $CONFIG &&
	if ! [ -e $BLACKLIST ]; then
		touch $BLACKLIST
	fi
	sed $BLACKLIST -i -e "s/^\(blacklist[[:space:]]*i2c[-_]bcm2708\)/#\1/"
	sed /etc/modules -i -e "s/^#[[:space:]]*\(i2c[-_]dev\)/\1/"
	if ! grep -q "^i2c[-_]dev" /etc/modules; then
		printf "i2c-dev\n" >> /etc/modules
	fi
	dtparam i2c_arm=$SETTING
	modprobe i2c-dev
fi

if [ -f /sys/class/i2c-dev/i2c-1/dev ]; then
	echo "pijuice system service is not active, attempting to enable run at boot and start"
	systemctl unmask pijuice.service
	systemctl enable pijuice.service
	systemctl start pijuice.service
fi

exit 0
