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

#pragma once
#include <os/IPC.h>
#include <ui/Color.h>
#include <ui/Rect.h>
#include <ui/ipc/Client.h>

namespace ui
{
    enum ServerMessages : u8
    {
        IPC_ENUM_SERVER(ui),
        CREATE_WINDOW_ID,
        SET_WINDOW_TITLE_ID,
        INVALIDATE_ID,
        CLOSE_WINDOW_ID,
        GET_SCREEN_RECT_ID,
    };

    struct CreateWindowRequest
    {
        using ResponseType = CreateWindowResponse;
        static constexpr u8 ID = CREATE_WINDOW_ID;

        ui::Rect rect;
        bool decorated;
    };

    struct SetWindowTitleRequest
    {
        static constexpr u8 ID = SET_WINDOW_TITLE_ID;

        int window;
        IPC_STRING(title);
    };

    struct InvalidateRequest
    {
        static constexpr u8 ID = INVALIDATE_ID;

        int window;
    };

    struct CloseWindowRequest
    {
        static constexpr u8 ID = CLOSE_WINDOW_ID;

        int window;
    };

    struct GetScreenRectRequest
    {
        using ResponseType = GetScreenRectResponse;
        static constexpr u8 ID = GET_SCREEN_RECT_ID;

        int _shadow; // Unused.
    };
}