#!/bin/bash

# Remove entity-server systemd service.

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"

# Load language and namespace from .env
# run.sh 와 동일한 서비스명을 산출하기 위해 SERVER_NAMESPACE/NAMESPACE 를 .env 에서 읽는다.
# (run.sh 는 .env 를 source 하므로, 여기서도 같은 값을 반영하지 않으면 서비스명이 어긋난다.)
if [ -f "$PROJECT_ROOT/.env" ]; then
    LANGUAGE=$(sed -n 's/^LANGUAGE=//p' "$PROJECT_ROOT/.env" | tail -n 1)
    if [ -z "${SERVER_NAMESPACE:-}" ]; then
        SERVER_NAMESPACE=$(sed -n 's/^SERVER_NAMESPACE=//p' "$PROJECT_ROOT/.env" | tail -n 1)
    fi
    if [ -z "${NAMESPACE:-}" ]; then
        NAMESPACE=$(sed -n 's/^NAMESPACE=//p' "$PROJECT_ROOT/.env" | tail -n 1)
    fi
fi
LANGUAGE=${LANGUAGE:-ko}

SERVICE_NAME="entity-server"
INTERACTIVE=false
CONFIRMED=false
SERVER_CONFIG="$PROJECT_ROOT/configs/server.json"

load_namespace() {
    local namespace="${SERVER_NAMESPACE:-${NAMESPACE:-}}"
    if [ -z "$namespace" ] && [ -f "$SERVER_CONFIG" ]; then
        namespace=$(sed -n 's/.*"namespace"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' "$SERVER_CONFIG" | head -n 1)
    fi
    namespace=$(echo "$namespace" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9_-]/-/g')
    if [ -z "$namespace" ]; then
        namespace="default"
    fi
    SERVICE_NAME="${namespace}-entity-server"
}

load_namespace

if [ $# -eq 0 ]; then
    INTERACTIVE=true
fi

for arg in "$@"; do
    case "$arg" in
        --yes|-y)
            CONFIRMED=true
            ;;
        *)
            if [ "$LANGUAGE" = "en" ]; then
                echo "❌ Unknown option: $arg"
                echo "   Service name is fixed: $SERVICE_NAME"
            else
                echo "❌ 알 수 없는 옵션: $arg"
                echo "   서비스명은 자동 고정값입니다: $SERVICE_NAME"
            fi
            exit 1
            ;;
    esac
done

UNIT_PATH="/etc/systemd/system/${SERVICE_NAME}.service"

# 제거를 묻기 전에 서비스가 실제로 등록되어 있는지 먼저 확인한다.
# (등록되어 있지 않으면 묻지 않고 안내만 출력하고 종료한다.)
SERVICE_EXISTS=false
if systemctl list-unit-files 2>/dev/null | grep -q "^${SERVICE_NAME}\.service"; then
    SERVICE_EXISTS=true
fi
if [ ! -f "$UNIT_PATH" ] && [ "$SERVICE_EXISTS" = false ]; then
    if [ "$LANGUAGE" = "en" ]; then
        echo "ℹ️  Service '$SERVICE_NAME' is not registered."
        echo "   Nothing to remove."
        echo ""
        echo "   To register the service, run:"
        echo "   sudo $(dirname "$0")/service-install.sh"
    else
        echo "ℹ️  '$SERVICE_NAME' 서비스가 등록되어 있지 않습니다."
        echo "   제거할 항목이 없습니다."
        echo ""
        echo "   서비스를 등록하려면:"
        echo "   sudo $(dirname "$0")/service-install.sh"
    fi
    exit 0
fi

if [ "$INTERACTIVE" = true ] && [ "$CONFIRMED" = false ]; then
    if [ "$LANGUAGE" = "en" ]; then
        echo "[interactive] systemd service removal"
        echo "service name: $SERVICE_NAME"
    else
        echo "[interactive] systemd 서비스 제거"
        echo "서비스명: $SERVICE_NAME"
    fi

    if [ "$LANGUAGE" = "en" ]; then
        read -r -p "Remove service '$SERVICE_NAME'? [y/N]: " input
    else
        read -r -p "'$SERVICE_NAME' 서비스를 제거할까요? [y/N]: " input
    fi
    input=$(echo "$input" | tr '[:upper:]' '[:lower:]')
    if [ "$input" != "y" ] && [ "$input" != "yes" ]; then
        if [ "$LANGUAGE" = "en" ]; then
            echo "Canceled."
        else
            echo "취소되었습니다."
        fi
        exit 0
    fi
fi

if [ "$EUID" -ne 0 ]; then
    if command -v sudo >/dev/null 2>&1; then
        exec sudo "$0" --yes
    fi
    if [ "$LANGUAGE" = "en" ]; then
        echo "❌ This script requires root privileges"
    else
        echo "❌ 이 스크립트는 root 권한이 필요합니다"
    fi
    exit 1
fi

if [ "$SERVICE_EXISTS" = true ]; then
    systemctl stop "$SERVICE_NAME" 2>/dev/null || true
    systemctl disable "$SERVICE_NAME" 2>/dev/null || true
fi

if [ -f "$UNIT_PATH" ]; then
    rm -f "$UNIT_PATH"
fi

systemctl daemon-reload

if [ "$LANGUAGE" = "en" ]; then
    echo "✅ Service removed: $SERVICE_NAME"
    echo ""
    echo "   To re-register the service, run:"
    echo "   sudo $(dirname "$0")/service-install.sh"
else
    echo "✅ 서비스 제거 완료: $SERVICE_NAME"
    echo ""
    echo "   서비스를 다시 등록하려면:"
    echo "   sudo $(dirname "$0")/service-install.sh"
fi