namespace FlappyBird.Gameplay.Pipes
{
    /// <summary>
    /// Contract for the pipe-pair pool service.
    /// </summary>
    public interface IPipePool
    {
        /// <summary>
        /// Pre-warms the pool. Must be called after the container is fully built
        /// (i.e. from IInitializable.Initialize) to avoid circular dependency.
        /// </summary>
        void Initialize();

        /// <summary>Returns a PipeView from the pool, expanding it if necessary.</summary>
        PipeView Get();

        /// <summary>Returns a PipeView back to the pool.</summary>
        void Return(PipeView pipe);
    }
}