#!/bin/bash

APP_NAME="owrawww"
APP_DIR="/home/www/owrainfo"
JAR="$APP_DIR/owrawww-0.0.1-SNAPSHOT.jar"
LOG_DIR="$APP_DIR/logs"
PID_FILE="$APP_DIR/owrawww.pid"
JAVA_HOME="/opt/jdk-21"

start() {
    if [ -f "$PID_FILE" ]; then
        PID=$(cat "$PID_FILE")
        if kill -0 "$PID" 2>/dev/null; then
            echo "[$APP_NAME] 이미 실행 중입니다. (PID: $PID)"
            exit 1
        else
            rm -f "$PID_FILE"
        fi
    fi

    mkdir -p "$LOG_DIR"

    echo "[$APP_NAME] 시작 중..."
    nohup "$JAVA_HOME/bin/java" \
        -jar "$JAR" \
        --spring.profiles.active=prod \
        > /dev/null 2>&1 &

    PID=$!
    echo $PID > "$PID_FILE"
    echo "[$APP_NAME] 시작됨. (PID: $PID)"
    echo "[$APP_NAME] 로그: $LOG_DIR/owrawww.log"
}

stop() {
    if [ ! -f "$PID_FILE" ]; then
        echo "[$APP_NAME] PID 파일이 없습니다. 실행 중이 아닌 것 같습니다."
        exit 1
    fi

    PID=$(cat "$PID_FILE")

    if ! kill -0 "$PID" 2>/dev/null; then
        echo "[$APP_NAME] 프로세스($PID)가 이미 종료되어 있습니다."
        rm -f "$PID_FILE"
        exit 0
    fi

    echo "[$APP_NAME] 종료 중... (PID: $PID)"
    kill "$PID"

    for i in $(seq 1 30); do
        if ! kill -0 "$PID" 2>/dev/null; then
            rm -f "$PID_FILE"
            echo "[$APP_NAME] 정상 종료됨."
            exit 0
        fi
        sleep 1
    done

    echo "[$APP_NAME] 강제 종료합니다."
    kill -9 "$PID"
    rm -f "$PID_FILE"
    echo "[$APP_NAME] 강제 종료됨."
}

status() {
    if [ -f "$PID_FILE" ]; then
        PID=$(cat "$PID_FILE")
        if kill -0 "$PID" 2>/dev/null; then
            echo "[$APP_NAME] 실행 중 (PID: $PID)"
        else
            echo "[$APP_NAME] 중지됨 (PID 파일 잔존)"
        fi
    else
        echo "[$APP_NAME] 중지됨"
    fi
}

case "$1" in
    start)   start   ;;
    stop)    stop    ;;
    restart) stop; sleep 2; start ;;
    status)  status  ;;
    *)
        echo "사용법: $0 {start|stop|restart|status}"
        exit 1
        ;;
esac
