#pragma once

#include "lumacs/window.hpp"
#include "lumacs/layout_node.hpp"
#include <memory>
#include <vector>

namespace lumacs {

/// @brief Interface for accessing window management functionality.
class IWindowManager {
public:
    virtual ~IWindowManager() = default;

    /// @brief Get the currently active window.
    virtual std::shared_ptr<Window> active_window() const = 0;

    /// @brief Collect all windows in the layout tree.
    /// This is a helper to allow managers to iterate over all windows.
    virtual void collect_windows(LayoutNode* node, std::vector<std::shared_ptr<Window>>& windows) = 0;
    
    /// @brief Get the root of the window layout tree.
    virtual std::shared_ptr<LayoutNode> root_layout() const = 0;
};

} // namespace lumacs
