"""
This program has been developed by students from the bachelor Computer Science at Utrecht
University within the Software Project course.
© Copyright Utrecht University (Department of Information and Computing Sciences)
"""

import json

import pytest
from fastapi.testclient import TestClient

from control_backend.api.v1.endpoints import message


@pytest.fixture
def client():
    """FastAPI TestClient for the message router."""
    from fastapi import FastAPI

    app = FastAPI()
    app.include_router(message.router)
    return TestClient(app)


def test_receive_message_post(client, monkeypatch):
    """Test POST /message endpoint sends message to pub socket."""

    # Dummy pub socket to capture sent messages
    class DummyPubSocket:
        def __init__(self):
            self.sent = []

        async def send_multipart(self, msg):
            self.sent.append(msg)

    dummy_socket = DummyPubSocket()

    # Patch app.state.endpoints_pub_socket
    client.app.state.endpoints_pub_socket = dummy_socket

    data = {"message": "Hello world"}
    response = client.post("/message", json=data)

    assert response.status_code == 202
    assert response.json() == {"status": "Message received"}

    # Ensure the message was sent via pub_socket
    assert len(dummy_socket.sent) == 1
    topic, body = dummy_socket.sent[0]
    parsed = json.loads(body.decode("utf-8"))
    assert parsed["message"] == "Hello world"
