#!/bin/bash
### BEGIN INIT INFO
# Provides:          clawphone
# Required-Start:    $local_fs $network $remote_fs $syslog
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: ClawPhone MCP Server
# Description:       Job Queue MCP Server for OpenClaw Agents
### END INIT INFO

NAME=clawphone
DESC="ClawPhone MCP Server"
PIDFILE=/var/run/$NAME.pid
DAEMON=/usr/bin/python3
DAEMON_SCRIPT=/home/share/clawphone/mcp_server.py
DAEMON_USER=root
DIR=/home/share/clawphone
ENV_FILE=/etc/default/clawphone

# Default arguments
DAEMON_ARGS=""

# Load configuration from /etc/default/clawphone
if [ -f "$ENV_FILE" ]; then
    . "$ENV_FILE"
    
    # Build arguments from config
    [ -n "$HOST" ] && DAEMON_ARGS="$DAEMON_ARGS --host $HOST"
    [ -n "$PORT" ] && DAEMON_ARGS="$DAEMON_ARGS --port $PORT"
    [ -n "$DB" ] && DAEMON_ARGS="$DAEMON_ARGS --db $DB"
    [ -n "$CERT" ] && DAEMON_ARGS="$DAEMON_ARGS --cert $CERT"
    [ -n "$KEY" ] && DAEMON_ARGS="$DAEMON_ARGS --key $KEY"
    [ -n "$LOG_DIR" ] && DAEMON_ARGS="$DAEMON_ARGS --log-dir $LOG_DIR"
    [ -n "$SYSLOG" ] && [ "$SYSLOG" = "1" ] && DAEMON_ARGS="$DAEMON_ARGS --syslog"
    [ -n "$TOKEN" ] && DAEMON_ARGS="$DAEMON_ARGS --token $TOKEN"
    
    # Export for the Python script
    [ -n "$DB" ] && export CLAWPHONE_DB="$DB"
    [ -n "$CERT" ] && export CLAWPHONE_CERT="$CERT"
    [ -n "$KEY" ] && export CLAWPHONE_KEY="$KEY"
    [ -n "$LOG_DIR" ] && export CLAWPHONE_LOG_DIR="$LOG_DIR"
    [ -n "$TOKEN" ] && export CLAWPHONE_TOKEN="$TOKEN"
fi

# Load LSB init functions
. /lib/lsb/init-functions

case "$1" in
  start)
    log_daemon_msg "Starting $DESC" "$NAME"
    if [ -f $PIDFILE ]; then
        PID=$(cat $PIDFILE)
        if ps -p $PID > /dev/null 2>&1; then
            log_failure_msg "$NAME is already running (PID $PID)"
            exit 1
        else
            rm -f $PIDFILE
        fi
    fi
    
    # Ensure directories exist
    [ -n "$DB" ] && mkdir -p "$(dirname $DB)"
    [ -n "$CERT" ] && mkdir -p "$(dirname $CERT)"
    [ -n "$KEY" ] && mkdir -p "$(dirname $KEY)"
    [ -n "$LOG_DIR" ] && mkdir -p "$LOG_DIR"
    
    # Start daemon with arguments
    cd $DIR
    start-stop-daemon --start --pidfile $PIDFILE --make-pidfile \
        --background --chuid $DAEMON_USER --chdir $DIR \
        --startas $DAEMON -- $DAEMON_SCRIPT $DAEMON_ARGS
    
    # Wait for server to start and show token
    sleep 2
    if [ -f "$DB" ]; then
        TOKEN=$(sqlite3 "$DB" "SELECT value FROM config WHERE key='server_token';" 2>/dev/null)
        if [ -n "$TOKEN" ]; then
            echo ""
            echo "============================================================"
            echo "  SERVER TOKEN: $TOKEN"
            echo "  (Copy this token to connect agents)"
            echo "============================================================"
        fi
    fi
    
    log_success_msg "$NAME started"
    ;;
    
  stop)
    log_daemon_msg "Stopping $DESC" "$NAME"
    if [ ! -f $PIDFILE ]; then
        log_failure_msg "$NAME is not running"
        exit 1
    fi
    
    start-stop-daemon --stop --pidfile $PIDFILE --remove-pidfile --retry 5
    log_success_msg "$NAME stopped"
    ;;
    
  restart)
    $0 stop
    sleep 1
    $0 start
    ;;
    
  status)
    if [ -f $PIDFILE ]; then
        PID=$(cat $PIDFILE)
        if ps -p $PID > /dev/null 2>&1; then
            echo "$NAME is running (PID $PID)"
            exit 0
        else
            echo "$NAME PID file exists but process is not running"
            exit 1
        fi
    else
        echo "$NAME is not running"
        exit 3
    fi
    ;;
    
  *)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
    ;;
esac

exit 0
