package com.insightfullogic.java8.examples.chapter5.mutable_custom;

import java.util.HashSet;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collector;

public class AlbumSalesCollector implements Collector<AlbumSale, AlbumSalesReport, AlbumSalesReport> {

    private static final Set<Characteristics> characteristics = new HashSet<>();
    static {
        characteristics.add(Characteristics.UNORDERED);
        characteristics.add(Characteristics.IDENTITY_FINISH);
    }

    @Override
    public Supplier<AlbumSalesReport> supplier() {
        return AlbumSalesReport::new;
    }

    @Override
    public BiConsumer<AlbumSalesReport, AlbumSale> accumulator() {
        return (report, album) -> report.acknowledgeSale(album);
    }

    @Override
    public BinaryOperator<AlbumSalesReport> combiner() {
        return (left, right) -> left.merge(right);
    }

    @Override
    public Function<AlbumSalesReport, AlbumSalesReport> finisher() {
        return Function.identity();
    }

    @Override
    public Set<Characteristics> characteristics() {
        return characteristics;
    }

}