#pragma once

#include "app_core/brush_ui.h"
#include "foundation/result.h"
#include "glm/glm.hpp"

#include <memory>
#include <string>

class App;
class Brush;
class NodePanelBrush;
class NodePanelStroke;

namespace pp::panopainter {

[[nodiscard]] bool apply_legacy_brush_color_plan(
    App& app,
    glm::vec4 color,
    bool update_quick,
    bool update_color_panel);
[[nodiscard]] bool apply_legacy_brush_texture_plan(
    App& app,
    pp::app::BrushUiTextureSlot slot,
    const std::string& path,
    const std::string& thumb);
[[nodiscard]] bool apply_legacy_brush_preset_plan(
    App& app,
    const std::shared_ptr<Brush>& brush);
[[nodiscard]] pp::foundation::Status execute_legacy_brush_stroke_changed_plan(App& app);
[[nodiscard]] pp::foundation::Status execute_legacy_brush_texture_list_plan(
    NodePanelBrush& panel,
    const pp::app::BrushTextureListPlan& plan);
[[nodiscard]] pp::foundation::Status execute_legacy_brush_stroke_control_plan(
    NodePanelStroke& panel,
    const pp::app::BrushStrokeControlPlan& plan);

} // namespace pp::panopainter
