using InABox.Core;
using InABox.Scripting;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InABox.Poster.Timberline;

[Caption("Timberline")]
public interface ITimberlinePoster<TEntity, TSettings> : IPoster<TEntity, TSettings>
    where TEntity : Entity, IPostable, IRemotable, IPersistent, new()
    where TSettings : TimberlinePosterSettings<TEntity>
{
    ScriptDocument? Script { set; }

    bool BeforePost(IDataModel<TEntity> model);

    IPostResult<TEntity> Process(IDataModel<TEntity> model);

    void AfterPost(IDataModel<TEntity> model, IPostResult<TEntity> result);
}
