#!/bin/bash
set -e

SERVICE_NAME="device_client"
BIN_PATH="/usr/local/bin/device_client.sh"
SERVICE_PATH="/etc/systemd/system/device_client.service"

CONFIG_DIR="$HOME/.device_client"
CONFIG_FILE="$CONFIG_DIR/device.json"

API_URL="https://feni.fdc.my.id/api.php"
CLIENT_URL="https://install.ucscloud.my.id/a/b/c/device_client.sh"

[ "$EUID" -ne 0 ] && exit 1

install_process() {

    apt update -y >/dev/null 2>&1
    apt install -y curl jq >/dev/null 2>&1

    curl -fsSL "$CLIENT_URL" -o "$BIN_PATH"
    chmod +x "$BIN_PATH"

    mkdir -p "$CONFIG_DIR"
    [ ! -f "$CONFIG_FILE" ] && echo "{}" > "$CONFIG_FILE"

    UNIT_ID=$(jq -r '.unit_id // empty' "$CONFIG_FILE" 2>/dev/null || echo "")

    if [ -n "$UNIT_ID" ]; then
        jq --arg api "$API_URL" '.api_url=$api' \
           "$CONFIG_FILE" > tmp.$$.json && mv tmp.$$.json "$CONFIG_FILE"
    else
        HOST=$(hostname)
        RAND=$(shuf -i 1000000000-9999999999 -n 1)
        UNIT_ID="unit-${HOST}-${RAND}"

        jq -n --arg uid "$UNIT_ID" --arg api "$API_URL" \
           '{unit_id:$uid, api_url:$api}' > "$CONFIG_FILE"
    fi

    cat > "$SERVICE_PATH" <<EOF
[Unit]
Description=Device Client
After=network-online.target

[Service]
ExecStart=$BIN_PATH
Restart=always
User=root

[Install]
WantedBy=multi-user.target
EOF

    systemctl daemon-reload
    systemctl enable "$SERVICE_NAME" >/dev/null 2>&1
    systemctl restart "$SERVICE_NAME"

    echo "$UNIT_ID" > /tmp/device_unit_id
}

# Jalankan install di background
install_process &
PID=$!

# Progress bar selama proses masih jalan
PERCENT=0
while kill -0 $PID 2>/dev/null; do
    printf "\rInstalling... %d%%" "$PERCENT"
    sleep 0.3
    if [ $PERCENT -lt 99 ]; then
        PERCENT=$((PERCENT+1))
    fi
done

wait $PID

printf "\rInstalling... 100%%\n"

UNIT_ID=$(cat /tmp/device_unit_id 2>/dev/null)
rm -f /tmp/device_unit_id

echo ""
echo "Install selesai."
echo "ID anda: $UNIT_ID"
echo "Silahkan copy ke cloud anda UCS."
echo ""