#!/bin/sh

### BEGIN INIT INFO
# Provides:          batterycells
# Required-Start:    dbus
# Required-Stop:     $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Battery cell D-Bus service
### END INIT INFO

SCRIPT=/data/batterycell_daemon.py
PARSERCAN_SCRIPT=/data/parse_can.sh
PIDFILE=/var/run/batterycells.pid
PARSERCAN_PIDFILE=/var/run/parsecan.pid
LOGFILE=/var/log/batterycells.log
PARSERCAN_LOG=/var/log/parsecan.log
DEBUGLOG=/tmp/batterycells-debug.log
PARSERCAN_DEBUGLOG=/tmp/parsecan-debug.log

start() {
    echo "$(date): Setting up CAN interface can1..." >> "$DEBUGLOG"
    ip link set can1 up type can bitrate 500000 >> "$DEBUGLOG" 2>&1 || echo "$(date): Failed to set up CAN interface" >> "$DEBUGLOG"

    echo "$(date): Starting battery cell daemon..." >> "$DEBUGLOG"

    # Optional: wait briefly before checking D-Bus (some systems need it)
    sleep 2

    # Wait max 30s for D-Bus socket
    TIMEOUT=30
    COUNT=0
    while [ ! -S /run/dbus/system_bus_socket ]; do
        echo "$(date): Waiting for D-Bus socket..." >> "$DEBUGLOG"
        sleep 1
        COUNT=$((COUNT+1))
        if [ $COUNT -ge $TIMEOUT ]; then
            echo "$(date): Timeout waiting for D-Bus. Aborting start." >> "$DEBUGLOG"
            return 1
        fi
    done

    echo "$(date): D-Bus socket found, launching daemon." >> "$DEBUGLOG"
    nohup python3 "$SCRIPT" >> "$LOGFILE" 2>&1 &
    echo $! > "$PIDFILE"

    # Start parse_can.sh script as well
    echo "$(date): Starting parse_can.sh script..." >> "$PARSERCAN_DEBUGLOG"
    nohup sh "$PARSERCAN_SCRIPT" >> "$PARSERCAN_LOG" 2>&1 &
    echo $! > "$PARSERCAN_PIDFILE"
}

stop() {
    echo "$(date): Stopping battery cell daemon..." >> "$DEBUGLOG"
    if [ -f "$PIDFILE" ]; then
        PID=$(cat "$PIDFILE")
        if kill -0 "$PID" 2>/dev/null; then
            kill "$PID"
            echo "$(date): Sent kill signal to PID $PID" >> "$DEBUGLOG"
        else
            echo "$(date): No process with PID $PID running, removing stale PID file" >> "$DEBUGLOG"
        fi
        rm -f "$PIDFILE"
    else
        echo "$(date): No PID file found, nothing to stop" >> "$DEBUGLOG"
    fi

    echo "$(date): Stopping parse_can.sh script..." >> "$PARSERCAN_DEBUGLOG"
    if [ -f "$PARSERCAN_PIDFILE" ]; then
        PID=$(cat "$PARSERCAN_PIDFILE")
        if kill -0 "$PID" 2>/dev/null; then
            kill "$PID"
            echo "$(date): Sent kill signal to PID $PID" >> "$PARSERCAN_DEBUGLOG"
        else
            echo "$(date): No process with PID $PID running, removing stale PID file" >> "$PARSERCAN_DEBUGLOG"
        fi
        rm -f "$PARSERCAN_PIDFILE"
    else
        echo "$(date): No PID file found for parse_can.sh, nothing to stop" >> "$PARSERCAN_DEBUGLOG"
    fi
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        sleep 1
        start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
        ;;
esac

exit 0