package io.examples.stock.domain;

import io.examples.infrastructure.StockQueries;
import io.vlingo.common.Completes;
import io.vlingo.lattice.query.StateObjectQueryActor;
import io.vlingo.symbio.store.MapQueryExpression;
import io.vlingo.symbio.store.QueryExpression;
import io.vlingo.symbio.store.object.ObjectStore;

import java.util.Set;
import java.util.function.Function;

public class StockQueriesActor extends StateObjectQueryActor implements StockQueries {

    public StockQueriesActor(final ObjectStore objectStore) {
        super(objectStore);
    }

    @Override
    public Completes<StockState> queryByLocation(final Location location) {
        final QueryExpression queryExpression =
                MapQueryExpression.using(StockState.class, "findAll");

        final Function<Set<StockState>, StockState> filter = states ->
                states.stream().filter(state -> state.locatedIn(location)).findFirst().get();

        return this.queryAll(Set.class, queryExpression, filter);
    }

}