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

namespace InABox.Poster.Custom;

public class CustomPosterSettings : PosterSettings
{
    public override string DefaultScript(Type TPostable)
    {
        var tName = TPostable.Name;
        var decapital = tName[0..1].ToLower() + tName[1..];

        var ns = TPostable.Namespace;

        return @"
using " + ns + @";
using InABox.Core;
using System.Collections.Generic;

public class Module
{
    // Output Results
    public IPostResult<" + tName + @"> Results { get; set; }

    // Customise 'model' before loading data. Return false if the post needs to be cancelled.
    public bool BeforePost(IDataModel<" + tName + @"> model)
    {
        return true;
    }

    public bool Process(IDataModel<" + tName + @"> model)
    {
        Results = new PostResult<" + tName + @">();
        foreach(var " + decapital + @" in model.GetTable<" + tName + @">().ToObjects<" + tName + @">())
        {
            // Do processing
            Results.AddSuccess(decapital);
        }

        return true; // return true for success.
    }

    // Perform any post-processing. All the items of type '" + tName + @" will be saved after this function is called.
    public void AfterPost(IDataModel<" + tName + @"> model)
    {
    }
}";
    }
}
