#pragma once

#include "lumacs/ui_interface.hpp"
#include <string>

namespace lumacs {

/// @brief Message severity levels for different types of feedback
enum class MessageSeverity {
    Info,       ///< Normal informational message (3-second timeout)
    Warning,    ///< Warning message (5-second timeout, yellow)
    Error,      ///< Error message (no auto-clear, red)
    Debug       ///< Debug message (logged only, not displayed)
};

/// @brief Interface for components that need to notify the editor of events or messages.
class IEditorNotifier {
public:
    virtual ~IEditorNotifier() = default;

    /// @brief Emit a system-wide editor event.
    /// @param event The event to broadcast.
    virtual void emit_event(EditorEvent event) = 0;

    /// @brief Display a message to the user.
    /// @param message The message string.
    /// @param severity The severity level (default: Info).
    virtual void set_message(std::string message, MessageSeverity severity = MessageSeverity::Info) = 0;
};

} // namespace lumacs
