using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.BL;
using Tango.BL.Entities;
using Tango.Integration.Operation;
using Tango.PPC.Common.Models;
namespace Tango.PPC.Common.Printing
{
/// <summary>
/// Represents a printing manager capable of executing jobs, changing job statuses according to completion stage and generating sample and fine tuning jobs.
/// </summary>
public interface IPrintingManager
{
/// <summary>
/// Prints the specified job.
/// When the job is complete the job status will change according to the completion stage.
/// </summary>
/// <param name="job">The job.</param>
/// <param name="context">The context.</param>
/// <returns></returns>
Task<JobHandler> Print(Job job, ObservablesContext context);
/// <summary>
/// Creates a sample dye job from the specified job and prints it.
/// When the sample dye job is complete, the job sample dye status will change.
/// </summary>
/// <param name="job">The job.</param>
/// <param name="context">The context.</param>
/// <returns></returns>
Task<JobHandler> PrintSample(Job job, ObservablesContext context);
/// <summary>
/// Creates a fine tuning job from the specified job and fine tune items.
/// When the fine tuning job is complete, the job fine tuning status will change.
/// </summary>
/// <param name="job">The job.</param>
/// <param name="context">The context.</param>
/// <param name="fineTuneItems">The fine tune items.</param>
/// <returns></returns>
Task<JobHandler> PrintFineTuning(Job job, ObservablesContext context, IEnumerable<FineTuneItem> fineTuneItems);
}
}