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

package com.hypixel.hytale.server.worldgen.loader;

import com.hypixel.hytale.server.worldgen.zoom.PixelProvider;
import com.hypixel.hytale.procedurallib.json.CoordinateRandomizerJsonLoader;
import com.hypixel.hytale.server.worldgen.zoom.FuzzyZoom;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.nio.file.Files;
import java.nio.file.OpenOption;
import java.awt.image.BufferedImage;
import com.google.gson.JsonElement;
import javax.annotation.Nonnull;
import com.hypixel.hytale.procedurallib.json.SeedString;
import com.hypixel.hytale.math.vector.Vector2i;
import java.nio.file.Path;
import com.hypixel.hytale.server.worldgen.chunk.MaskProvider;
import com.hypixel.hytale.server.worldgen.SeedStringResource;
import com.hypixel.hytale.procedurallib.json.JsonLoader;

public class MaskProviderJsonLoader extends JsonLoader<SeedStringResource, MaskProvider>
{
    protected final Path file;
    protected final Vector2i zoomSize;
    protected final Vector2i worldOffset;
    
    public MaskProviderJsonLoader(@Nonnull final SeedString<SeedStringResource> seed, final Path dataFolder, final JsonElement json, final Path file, final Vector2i zoomSize, final Vector2i worldOffset) {
        super(seed.append(".MaskProvider"), dataFolder, json);
        this.file = file;
        this.zoomSize = zoomSize;
        this.worldOffset = worldOffset;
    }
    
    @Nonnull
    @Override
    public MaskProvider load() {
        try {
            final BufferedImage mask = loadImage(this.file);
            return new MaskProvider(this.loadFuzzyZoom(mask));
        }
        catch (final Throwable e) {
            throw new Error("Error while loading MaskProvider in " + String.valueOf(this.file.toAbsolutePath()), e);
        }
    }
    
    public static BufferedImage loadImage(@Nonnull final Path file) throws IOException {
        try {
            return ImageIO.read(Files.newInputStream(file, new OpenOption[0]));
        }
        catch (final IOException e) {
            throw new IOException("Failed to load image " + String.valueOf(file), (Throwable)e);
        }
    }
    
    @Nonnull
    protected FuzzyZoom loadFuzzyZoom(@Nonnull final BufferedImage mask) {
        return new FuzzyZoom(new CoordinateRandomizerJsonLoader(this.seed, this.dataFolder, this.json).load(), new PixelProvider(mask), this.zoomSize.getX() / (double)mask.getWidth(), this.zoomSize.getY() / (double)mask.getHeight(), this.worldOffset.x, this.worldOffset.y);
    }
}
