#pragma once namespace pp::app { enum class ProjectOpenDecision { open_now, prompt_discard_unsaved, }; enum class CloseRequestDecision { close_now, show_unsaved_prompt, wait_for_existing_prompt, }; [[nodiscard]] constexpr ProjectOpenDecision plan_project_open(bool has_unsaved_changes) noexcept { return has_unsaved_changes ? ProjectOpenDecision::prompt_discard_unsaved : ProjectOpenDecision::open_now; } [[nodiscard]] constexpr CloseRequestDecision plan_close_request( bool has_unsaved_changes, bool close_prompt_already_open) noexcept { if (!has_unsaved_changes) { return CloseRequestDecision::close_now; } return close_prompt_already_open ? CloseRequestDecision::wait_for_existing_prompt : CloseRequestDecision::show_unsaved_prompt; } }