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

package com.hypixel.hytale.server.core.asset.common;

import javax.annotation.Nullable;
import com.hypixel.hytale.sneakythrow.SneakyThrow;
import java.io.InputStream;
import java.io.IOException;
import java.util.concurrent.CompletableFuture;
import javax.annotation.Nonnull;

public class ResourceCommonAsset extends CommonAsset
{
    private final Class<?> clazz;
    private final String path;
    
    public ResourceCommonAsset(final Class<?> clazz, final String path, @Nonnull final String name, final byte[] bytes) {
        super(name, bytes);
        this.clazz = clazz;
        this.path = path;
    }
    
    public ResourceCommonAsset(final Class<?> clazz, final String path, @Nonnull final String name, @Nonnull final String hash, final byte[] bytes) {
        super(name, hash, bytes);
        this.clazz = clazz;
        this.path = path;
    }
    
    public String getPath() {
        return this.path;
    }
    
    @Nonnull
    public CompletableFuture<byte[]> getBlob0() {
        try (final InputStream stream = this.clazz.getResourceAsStream(this.path)) {
            return CompletableFuture.completedFuture(stream.readAllBytes());
        }
        catch (final IOException e) {
            return CompletableFuture.failedFuture(e);
        }
    }
    
    @Nonnull
    @Override
    public String toString() {
        return "ResourceCommonAsset{" + super.toString();
    }
    
    @Nullable
    public static ResourceCommonAsset of(@Nonnull final Class<?> clazz, @Nonnull final String path, @Nonnull final String name) {
        try (final InputStream stream = clazz.getResourceAsStream(path)) {
            if (stream == null) {
                final ResourceCommonAsset resourceCommonAsset = null;
                if (stream != null) {
                    stream.close();
                }
                return resourceCommonAsset;
            }
            final byte[] bytes = stream.readAllBytes();
            return new ResourceCommonAsset(clazz, path, name, bytes);
        }
        catch (final IOException e) {
            throw SneakyThrow.sneakyThrow(e);
        }
    }
}
