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

package com.hypixel.hytale.builtin.hytalegenerator.props.directionality;

import com.hypixel.hytale.math.util.FastRandom;
import com.hypixel.hytale.math.vector.Vector3i;
import com.hypixel.hytale.builtin.hytalegenerator.scanners.Scanner;
import java.util.Collections;
import com.hypixel.hytale.builtin.hytalegenerator.framework.math.SeedGenerator;
import com.hypixel.hytale.builtin.hytalegenerator.patterns.Pattern;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.core.prefab.PrefabRotation;
import java.util.List;

public class RandomDirectionality extends Directionality
{
    @Nonnull
    private final List<PrefabRotation> rotations;
    @Nonnull
    private final Pattern pattern;
    @Nonnull
    private final SeedGenerator seedGenerator;
    
    public RandomDirectionality(@Nonnull final Pattern pattern, final int seed) {
        this.pattern = pattern;
        this.seedGenerator = new SeedGenerator(seed);
        this.rotations = Collections.unmodifiableList((List<? extends PrefabRotation>)List.of(PrefabRotation.ROTATION_0, PrefabRotation.ROTATION_90, PrefabRotation.ROTATION_180, PrefabRotation.ROTATION_270));
    }
    
    @Nonnull
    @Override
    public Pattern getGeneralPattern() {
        return this.pattern;
    }
    
    @Nonnull
    @Override
    public Vector3i getReadRangeWith(@Nonnull final Scanner scanner) {
        return scanner.readSpaceWith(this.pattern).getRange();
    }
    
    @Nonnull
    @Override
    public List<PrefabRotation> getPossibleRotations() {
        return this.rotations;
    }
    
    @Override
    public PrefabRotation getRotationAt(@Nonnull final Pattern.Context context) {
        final FastRandom random = new FastRandom(this.seedGenerator.seedAt(context.position.x, context.position.y, context.position.z));
        return this.rotations.get(random.nextInt(this.rotations.size()));
    }
}
