#!/bin/sh
set -eu

TEST_DIR="$(mktemp -d)"
cleanup() {
    if [ -n "${LVA_PID:-}" ] && kill -0 "$LVA_PID" 2>/dev/null; then
        kill "$LVA_PID" 2>/dev/null || true
        wait "$LVA_PID" 2>/dev/null || true
    fi
    rm -rf "$TEST_DIR"
}
trap cleanup EXIT INT TERM

mkdir -p "$TEST_DIR/stubs"
cat > "$TEST_DIR/stubs/soundcard.py" <<'PY'
import numpy as np


class _Recorder:
    def __init__(self, channels):
        self.channels = channels

    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc, tb):
        return False

    def record(self, block_size):
        return np.zeros((block_size, self.channels), dtype=np.float32)


class _Microphone:
    name = "autopkgtest-dummy-microphone"

    def recorder(self, samplerate=16000, channels=1, blocksize=1024):
        return _Recorder(channels)


def default_microphone():
    return _Microphone()


def get_microphone(device):
    return _Microphone()
PY

cat > "$TEST_DIR/stubs/mpv.py" <<'PY'
class MPV:
    def __init__(self, *args, **kwargs):
        self.pause = False
        self._callbacks = {}

    def __setitem__(self, key, value):
        setattr(self, key.replace("-", "_"), value)

    def event_callback(self, name):
        def decorator(func):
            self._callbacks[name] = func
            return func

        return decorator

    def play(self, url):
        return None

    def stop(self):
        return None

    def terminate(self):
        return None
PY

cat > "$TEST_DIR/stubs/sitecustomize.py" <<'PY'
import sys
import types


zeroconf_module = types.ModuleType("linux_voice_assistant.zeroconf")


class HomeAssistantZeroconf:
    def __init__(self, *args, **kwargs):
        pass

    async def register_server(self):
        return None


zeroconf_module.HomeAssistantZeroconf = HomeAssistantZeroconf
sys.modules["linux_voice_assistant.zeroconf"] = zeroconf_module
PY

OUTPUT="$TEST_DIR/linux-voice-assistant.log"
if [ -n "${LVA_COMMAND:-}" ]; then
    # Intentionally split LVA_COMMAND so build-time use can pass
    # "python3 -m linux_voice_assistant".
    set -- $LVA_COMMAND
else
    set -- linux-voice-assistant
fi

XDG_CONFIG_HOME="$TEST_DIR/config" \
XDG_DATA_HOME="$TEST_DIR/data" \
PYTHONPATH="$TEST_DIR/stubs${PYTHONPATH:+:$PYTHONPATH}" \
    "$@" \
        --host 127.0.0.1 \
        --network-interface lo \
        --port 0 \
        --audio-input-device autopkgtest \
        >"$OUTPUT" 2>&1 &
LVA_PID=$!

for _ in $(seq 1 30); do
    if grep -q "Server started" "$OUTPUT"; then
        exit 0
    fi

    if ! kill -0 "$LVA_PID" 2>/dev/null; then
        wait "$LVA_PID" || true
        cat "$OUTPUT"
        exit 1
    fi

    sleep 1
done

cat "$OUTPUT"
exit 1
