using e_suite.Workflow.Core.Attributes;
using e_suite.Workflow.Core.Enums;
using eSuite.Core.Miscellaneous;

namespace e_suite.Workflow.Core.Interfaces;

public interface IWorkflowVersion : IStage<GeneralTaskAttribute>
{
    /// <summary>
    /// Client domain to which the workflow belongs.
    /// </summary>
    IGeneralIdRef Domain { get; set; }

    //todo Move this out to runtime only.
    /// <summary>
    /// Current state of the workflow, see WorkflowState for details of the various states.
    /// </summary>
    [RuntimeOnly]
    WorkflowState CurrentState { get; set; }

    string ActivityNameTemplate { get; set; }

    /// <summary>
    /// Description of the workflow
    /// </summary>
    string Description { get; set; }

    //Todo can only be on a run-time instance
    ///// <summary>
    ///// If the workflow has been paused, will be true.
    ///// </summary>
    //bool Paused { get; }
    
    ///// <summary>
    ///// Called when the task status has been progressed from Pending to Active.
    /////
    ///// Note: You can use this method to set the TaskStatus to ReadyToComplete if there is no manual processing needed for this task.
    ///// After this method is completed, the TaskStatus must be either Active or ReadyToComplete.
    ///// </summary>
    ///// <returns></returns>
    //Task OnActivateAsync();

    ///// <summary>
    ///// Called when the task status has been progressed from ReadyToComplete to Completed
    ///// When this method is completed the state must be either Active, or Completed.
    ///// </summary>
    ///// <returns></returns>
    //Task OnCompleteAsync();
}