/**
 * @file ipc/Client.h
 * @author apio (cloudapio.eu)
 * @brief IPC message definitions for UI messages sent to the client.
 *
 * @copyright Copyright (c) 2023, the Luna authors.
 *
 */

#pragma once
#include <os/IPC.h>
#include <ui/Point.h>

namespace ui
{
    enum ClientMessages : u8
    {
        IPC_ENUM_CLIENT(ui),
        CREATE_WINDOW_RESPONSE_ID,
        WINDOW_CLOSE_REQUEST_ID,
        MOUSE_EVENT_REQUEST_ID,
        GET_SCREEN_RECT_RESPONSE_ID
    };

    struct CreateWindowResponse
    {
        static constexpr u8 ID = CREATE_WINDOW_RESPONSE_ID;

        int window;
        IPC_STRING(shm_path);
    };

    struct WindowCloseRequest
    {
        static constexpr u8 ID = WINDOW_CLOSE_REQUEST_ID;

        int window;
    };

    struct MouseEventRequest
    {
        static constexpr u8 ID = MOUSE_EVENT_REQUEST_ID;

        int window;
        Point position;
        int buttons;
    };

    struct GetScreenRectResponse
    {
        static constexpr u8 ID = GET_SCREEN_RECT_RESPONSE_ID;

        Rect rect;
    };
}