#pragma once
#include <concepts>
#include "renderive/base/property/Concepts.hpp"
#include "base/State_Strategy_Base.hpp"
template <class That>
concept State_Value = Property_Set<That>;
template <class Product, class State>
concept Has_State_Validator = requires(const State& state) {
    { Product::validate_state(state) } -> std::same_as<void>;
};
template <class That>
concept Double_State_Strategy_Type = std::derived_from<That, State_Strategy_Base> && requires(That& strategy, const That& const_strategy) {
    typename That::State;
    typename That::Observation;
    { strategy.publish() } -> std::same_as<void>;
    { const_strategy.state_revision() } -> std::same_as<std::uint64_t>;
};
template <class That>
concept Triple_State_Strategy_Type = Double_State_Strategy_Type<That> && requires(That& strategy) {
    { strategy.acquire_render_state() } -> std::same_as<std::uint64_t>;
};
