#pragma once
#include <concepts>
#include "Frame_Control_Strategy_Base.hpp"
#include "Frame_Lease.hpp"
template <class That>
concept Frame_Lease_Strategy = Runtime_Frame_Control_Strategy<That> && requires(That& strategy) {
    typename That::Frame;
    typename That::Painter_Lease;
    typename That::Render_Lease;
    requires Painter_Frame_Lease<typename That::Painter_Lease, typename That::Frame>;
    requires Render_Frame_Lease<typename That::Render_Lease, typename That::Frame>;
    { strategy.acquire_painter() } -> std::same_as<typename That::Painter_Lease>;
    { strategy.acquire_renderer() } -> std::same_as<typename That::Render_Lease>;
};
template <class That>
concept Frame_Control_Strategy = Frame_Lease_Strategy<That>;
template <class That, class Scene_Frame>
concept Frame_Control_Strategy_For = Frame_Control_Strategy<That> && std::derived_from<typename That::Frame, Scene_Frame>;
