#!/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
