using MainShell.Common;
using MainShell.Models.Wafer;
using MainShell.Recipe.BaseBoard.Model;
using System.Collections.Generic;

namespace MainShell.Process
{
    public interface IDieTransferPathGenerator
    {
        DieTransferPathPlan Generate(DieTransferPathRequest request);

        DieTransferPathRegionPlan GenerateByRegion(DieTransferPathRequest request);

        DieTransferPathRegionPlan GenerateByCandidates(
            IReadOnlyCollection<Pad> padCandidates,
            IReadOnlyCollection<Die> dieCandidates,
            TransPathType transPathType,
            bool skipNgDie,
            DieTransferRowTraversalStrategy padRowDirectionStrategy,
            DieTransferRowTraversalStrategy dieRowDirectionStrategy);

        DieTransferPathRegionPlan GenerateByRows(
            IReadOnlyCollection<PadTransferRow> padRows,
            IReadOnlyCollection<DieTransferRow> dieRows,
            TransPathType transPathType);
    }
}