import { JobData, ShipmentData } from "../../../../models";
import { RouteResultEditorBase } from "../../route-result-editor-base";
type ItemWithRequirements = {
    requirements?: string[];
};
type AgentWithTimeWindows = {
    time_windows?: [number, number][];
};
/**
 * Shared helper for managing requirements on jobs and shipments
 */
export declare class RequirementHelper {
    static readonly UNASSIGNED_REQ = "unassigned";
    static readonly ASSIGN_AGENT_PREFIX = "assign-agent-";
    static readonly NON_ASSIGNABLE_REQUIREMENT = "NON_ASSIGNABLE";
    static createAssignAgentRequirement(agentIndex: number): string;
    static ensureRequirementsArray(item: ItemWithRequirements): void;
    static addRequirement(requirements: string[], req: string): void;
    static removeRequirement(requirements: string[], req: string): void;
    static markAsUnassigned(item: ItemWithRequirements): void;
    static assignToAgent(item: ItemWithRequirements, agentIndex: number): void;
    static markItemsAsUnassigned<T extends ItemWithRequirements>(items: T[], indexes: number[]): void;
    static assignItemsToAgent<T extends ItemWithRequirements>(items: T[], indexes: number[], agentIndex: number): void;
    static markExistingUnassignedJobs(context: RouteResultEditorBase, jobs: JobData[]): void;
    static markExistingUnassignedShipments(context: RouteResultEditorBase, shipments: ShipmentData[]): void;
    static markRemainingJobsWithAgentRequirement(context: RouteResultEditorBase, jobs: JobData[], excludeIndexes: number[]): void;
    static markRemainingShipmentsWithAgentRequirement(context: RouteResultEditorBase, shipments: ShipmentData[], excludeIndexes: number[]): void;
    static extendAgentTimeWindows(agent: AgentWithTimeWindows): void;
    static restrictAssignmentsToTargetSet<T extends ItemWithRequirements>(items: T[], targetIndexes: Set<number>): void;
}
export {};
