#include "app_core/document_session.h"

namespace pp::app {
namespace {

[[nodiscard]] constexpr HistoryUiPlan make_history_clear_effect() noexcept
{
    HistoryUiPlan plan;
    plan.operation = HistoryUiOperation::clear;
    plan.clears_history = true;
    plan.updates_memory_label = true;
    return plan;
}

[[nodiscard]] constexpr HistoryUiPlan make_history_no_op_effect() noexcept
{
    HistoryUiPlan plan;
    plan.operation = HistoryUiOperation::clear;
    plan.no_op = true;
    return plan;
}

} // namespace

HistoryUiPlan plan_document_open_history(const DocumentOpenRoute& route) noexcept
{
    return route.kind == DocumentOpenKind::open_project
        ? make_history_clear_effect()
        : make_history_no_op_effect();
}

HistoryUiPlan plan_close_request_history(CloseRequestDecision) noexcept
{
    return make_history_no_op_effect();
}

HistoryUiPlan plan_document_save_history(DocumentSaveDecision) noexcept
{
    return make_history_no_op_effect();
}

HistoryUiPlan plan_document_workflow_history(DocumentWorkflowDecision) noexcept
{
    return make_history_no_op_effect();
}

HistoryUiPlan plan_document_file_save_history(const DocumentFileSavePlan&) noexcept
{
    return make_history_no_op_effect();
}

HistoryUiPlan plan_document_version_save_history(const DocumentVersionTarget&) noexcept
{
    return make_history_no_op_effect();
}

HistoryUiPlan plan_new_document_history(const NewDocumentPlan&) noexcept
{
    return make_history_clear_effect();
}

} // namespace pp::app
