#include "infinite_canvas/agent_service.h"

#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char **p_argv)
{
    assert(argc == 2);
    assert(setenv(
        "INFINITE_CANVAS_COPILOT_SIDECAR_PATH",
        p_argv[1],
        1) == 0);
    assert(setenv(
        "INFINITE_CANVAS_COPILOT_CLI_PATH",
        p_argv[1],
        1) == 0);

    Dowa_Arena *p_arena = Dowa_Arena_Create(ONE_MEGA_BYTE);
    assert(p_arena);
    Canvas_Agent_Service service;
    assert(Canvas_Agent_Service_Init(&service, p_arena));
    assert(Canvas_Agent_Service_Submit(
        &service,
        "Create a rendering session",
        "entity id=42 type=Agent conversation"));

    Canvas_Agent_Status status = CANVAS_AGENT_WORKING;
    char response[CANVAS_AGENT_RESPONSE_CAPACITY] = {0};
    char error[512] = {0};
    for (int32 attempt = 0;
        attempt < 200 && status == CANVAS_AGENT_WORKING;
        attempt++) {
        usleep(10000);
        status = Canvas_Agent_Service_Poll(
            &service,
            response,
            sizeof(response),
            error,
            sizeof(error));
    }
    assert(status == CANVAS_AGENT_READY);
    assert(strstr(response, "hello traveler"));

    Canvas_Agent_Service_Shutdown(&service);
    Dowa_Arena_Free(p_arena);
    return 0;
}
