// Path: warehouse-model/src/main/java/warehouse/PaletteLabel.java
// @Value
// public class PaletteLabel {
//     private final String id;
//     private final String refNo;
// 
//     @Override
//     public String toString() {
//         return id;
//     }
// }
// 
// Path: warehouse-model/src/main/java/warehouse/locations/Location.java
// @Value
// public class Location {
//     private final String location;
// 
//     public static Location production() {
//         return new Location("production");
//     }
// 
//     public static Location quarantine() {
//         return new Location("quarantine");
//     }
// 
//     public static Location onTheMove(String user) {
//         return new Location("picked by " + user);
//     }
// 
//     public static Location unknown() {
//         return new Location("<unknown>");
//     }
// }
// 
// Path: warehouse-model/src/main/java/warehouse/products/Delivered.java
// @Value
// public class Delivered {
//     private final PaletteLabel paletteLabel;
// }
// 
// Path: warehouse-model/src/main/java/warehouse/products/Registered.java
// @Value
// @AllArgsConstructor
// public class Registered {
//     private final PaletteLabel paletteLabel;
//     private final List<BoxLabel> scannedBoxes;
//     private final LocalDateTime readyAt;
//     private final Location preferredLocation;
//     private final ValidationResult validationResult;
// 
//     public Registered(PaletteLabel paletteLabel, List<BoxLabel> scannedBoxes,
//                       LocalDateTime readyAt, Location preferredLocation) {
//         this.paletteLabel = paletteLabel;
//         this.scannedBoxes = Collections.unmodifiableList(scannedBoxes);
//         this.readyAt = readyAt;
//         this.preferredLocation = preferredLocation;
//         validationResult = valid();
//     }
// }
// 
// Path: warehouse-model/src/main/java/warehouse/quality/Destroyed.java
// @Value
// public class Destroyed {
//     private final PaletteLabel paletteLabel;
// }
// 
// Path: warehouse-model/src/main/java/warehouse/quality/Locked.java
// @Value
// public class Locked {
//     private final PaletteLabel paletteLabel;
// }
// 
// Path: warehouse-model/src/main/java/warehouse/quality/Unlocked.java
// @Value
// public class Unlocked {
//     private final PaletteLabel paletteLabel;
//     private final int recovered;
//     private final int scraped;
// }


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import warehouse.PaletteLabel;
import warehouse.locations.Location;
import warehouse.products.Delivered;
import warehouse.products.Registered;
import warehouse.quality.Destroyed;
import warehouse.quality.Locked;
import warehouse.quality.Unlocked;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
package warehouse.picklist;



/**
 * Created by michal on 15.07.2016.
 */
@AllArgsConstructor
public class Fifo {

    public interface PaletteLocations {
// Path: warehouse-model/src/main/java/warehouse/PaletteLabel.java
// @Value
// public class PaletteLabel {
//     private final String id;
//     private final String refNo;
// 
//     @Override
//     public String toString() {
//         return id;
//     }
// }
// 
// Path: warehouse-model/src/main/java/warehouse/locations/Location.java
// @Value
// public class Location {
//     private final String location;
// 
//     public static Location production() {
//         return new Location("production");
//     }
// 
//     public static Location quarantine() {
//         return new Location("quarantine");
//     }
// 
//     public static Location onTheMove(String user) {
//         return new Location("picked by " + user);
//     }
// 
//     public static Location unknown() {
//         return new Location("<unknown>");
//     }
// }
// 
// Path: warehouse-model/src/main/java/warehouse/products/Delivered.java
// @Value
// public class Delivered {
//     private final PaletteLabel paletteLabel;
// }
// 
// Path: warehouse-model/src/main/java/warehouse/products/Registered.java
// @Value
// @AllArgsConstructor
// public class Registered {
//     private final PaletteLabel paletteLabel;
//     private final List<BoxLabel> scannedBoxes;
//     private final LocalDateTime readyAt;
//     private final Location preferredLocation;
//     private final ValidationResult validationResult;
// 
//     public Registered(PaletteLabel paletteLabel, List<BoxLabel> scannedBoxes,
//                       LocalDateTime readyAt, Location preferredLocation) {
//         this.paletteLabel = paletteLabel;
//         this.scannedBoxes = Collections.unmodifiableList(scannedBoxes);
//         this.readyAt = readyAt;
//         this.preferredLocation = preferredLocation;
//         validationResult = valid();
//     }
// }
// 
// Path: warehouse-model/src/main/java/warehouse/quality/Destroyed.java
// @Value
// public class Destroyed {
//     private final PaletteLabel paletteLabel;
// }
// 
// Path: warehouse-model/src/main/java/warehouse/quality/Locked.java
// @Value
// public class Locked {
//     private final PaletteLabel paletteLabel;
// }
// 
// Path: warehouse-model/src/main/java/warehouse/quality/Unlocked.java
// @Value
// public class Unlocked {
//     private final PaletteLabel paletteLabel;
//     private final int recovered;
//     private final int scraped;
// }


// Path: warehouse-model/src/main/java/warehouse/picklist/Fifo.java
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import warehouse.PaletteLabel;
import warehouse.locations.Location;
import warehouse.products.Delivered;
import warehouse.products.Registered;
import warehouse.quality.Destroyed;
import warehouse.quality.Locked;
import warehouse.quality.Unlocked;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;

package warehouse.picklist;



/**
 * Created by michal on 15.07.2016.
 */
@AllArgsConstructor
public class Fifo {

    public interface PaletteLocations {
        Location locationOf(PaletteLabel paletteLabel);