#!/bin/bash

# Function to show the current timezone using two alternative methods
show_timezone() {
	if [ -f /data/timezone ]; then
		cat /data/timezone
	elif [ -f /etc/timezone ]; then
		cat /etc/timezone
	elif [ -f /etc/localtime ]; then
		readlink /etc/localtime | sed 's|/usr/share/zoneinfo/||'
	else
		echo "Cannot determine timezone."
	fi
}

# Function to set the timezone
set_timezone() {
	local new_timezone="$1"
	if [ ! -f "/usr/share/zoneinfo/$new_timezone" ]; then
		echo "Invalid timezone: $new_timezone"
		return 1
	fi

	echo "$new_timezone" >/data/timezone
	echo "$new_timezone" >/etc/timezone
	ln -sf "/usr/share/zoneinfo/$new_timezone" /etc/localtime

	# Update /etc/environment if it exists
	if [ -f /etc/environment ]; then
		sed -i "/^TZ=/c\TZ=$new_timezone" /etc/environment
	fi

	# Update s6 container environment if it exists
	if [ -d /var/run/s6/container_environment ]; then
		echo "$new_timezone" >/var/run/s6/container_environment/TZ
	fi

	echo "Timezone set to: $new_timezone"
}

# Function to enable or disable NTP
set_ntp() {
	case "$1" in
	"false")
		systemctl stop systemd-timesyncd
		systemctl disable systemd-timesyncd
		echo "NTP disabled"
		;;
	"true")
		systemctl start systemd-timesyncd
		systemctl enable systemd-timesyncd

		# Remove the /data/timezone file when NTP is enabled
		if [ -f /data/timezone ]; then
			rm -f /data/timezone
			echo "Timezone configuration file /data/timezone deleted."
		fi

		echo "NTP enabled"
		;;
	*)
		echo "Invalid argument for set-ntp. Use 'false' or 'true'."
		;;
	esac
}

# Function to show detailed time settings
show_time_details() {
	local local_time
	local utc_time
	local time_zone
	local ntp_status="no"
	local ntp_service="inactive"

	local_time="$(date)"
	utc_time="$(date -u)"
	time_zone="$(show_timezone)"

	# Check if NTP is used
	if systemctl is-active --quiet systemd-timesyncd; then
		ntp_status="yes"
		ntp_service="active"
	fi

	# Print the information
	echo "Local time: $local_time"
	echo "Universal time: $utc_time"
	echo "Time zone: $time_zone"
	echo "Network time on: $ntp_status"
	echo "NTP service: $ntp_service"
}

# Main script logic
case "$1" in
"set-ntp")
	set_ntp "$2"
	;;
"show")
	show_timezone
	;;
"set-timezone")
	set_timezone "$2"
	;;
*)
	show_time_details
	;;
esac
