// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.builtin.portals.utils.posqueries.predicates.generic;

import java.util.stream.Stream;
import javax.annotation.Nullable;
import com.hypixel.hytale.builtin.portals.utils.posqueries.SpatialQueryDebug;
import com.hypixel.hytale.math.vector.Vector3d;
import com.hypixel.hytale.server.core.universe.world.World;
import com.hypixel.hytale.builtin.portals.utils.posqueries.SpatialQuery;

public class FlatMapQuery implements SpatialQuery
{
    private final SpatialQuery generator;
    private final SpatialQuery expand;
    
    public FlatMapQuery(final SpatialQuery generator, final SpatialQuery expand) {
        this.generator = generator;
        this.expand = expand;
    }
    
    @Override
    public Stream<Vector3d> createCandidates(final World world, final Vector3d origin, @Nullable final SpatialQueryDebug debug) {
        return this.generator.createCandidates(world, origin, debug).flatMap(candidate -> {
            final Stream<Vector3d> candidates = this.expand.createCandidates(world, candidate, debug);
            if (debug != null) {
                debug.indent("Flat-map expand from " + debug.fmt(candidate));
                return Stream.concat((Stream<?>)candidates, Stream.of((Object)null).peek(x -> debug.unindent()).flatMap(x -> Stream.empty()));
            }
            else {
                return (Stream<Object>)candidates;
            }
        });
    }
}
