#pragma once

#include <memory>

#include "application/contracts/ConfigUiTypes.h"
#include "application/contracts/DiagnosticsUiTypes.h"

namespace ta::ui
{
    struct UiShellSnapshot
    {
        bool valid = false;
        bool in_raid = false;
        int menu_key = 0x2D; // VK_INSERT without leaking Windows.h into the contract.
        std::shared_ptr<const ConfigUiSnapshot> config;
        DiagnosticsSnapshot diagnostics;
    };

    class UiReadModel
    {
    public:
        virtual ~UiReadModel() = default;
        [[nodiscard]] virtual UiShellSnapshot capture_ui_shell(bool include_diagnostics) const = 0;
    };
}
