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

package com.hypixel.hytale.builtin.asseteditor.assettypehandler;

import com.hypixel.hytale.builtin.asseteditor.EditorClient;
import com.hypixel.hytale.builtin.asseteditor.AssetPath;
import com.hypixel.hytale.assetstore.AssetUpdateQuery;
import java.nio.file.Path;
import javax.annotation.Nonnull;
import com.hypixel.hytale.protocol.packets.asseteditor.AssetEditorAssetType;

public abstract class AssetTypeHandler
{
    @Nonnull
    protected final AssetEditorAssetType config;
    @Nonnull
    protected final Path rootPath;
    protected AssetUpdateQuery cachedDefaultUpdateQuery;
    
    protected AssetTypeHandler(@Nonnull final AssetEditorAssetType config) {
        this.config = config;
        this.rootPath = Path.of(config.path, new String[0]);
    }
    
    public abstract AssetLoadResult loadAsset(final AssetPath p0, final Path p1, final byte[] p2, final AssetUpdateQuery p3, final EditorClient p4);
    
    public abstract AssetLoadResult unloadAsset(final AssetPath p0, final AssetUpdateQuery p1);
    
    public abstract AssetLoadResult restoreOriginalAsset(final AssetPath p0, final AssetUpdateQuery p1);
    
    public abstract AssetUpdateQuery getDefaultUpdateQuery();
    
    public AssetLoadResult loadAsset(final AssetPath path, final Path dataPath, final byte[] data, final EditorClient editorClient) {
        return this.loadAsset(path, dataPath, data, this.getDefaultUpdateQuery(), editorClient);
    }
    
    public AssetLoadResult unloadAsset(final AssetPath path) {
        return this.unloadAsset(path, this.getDefaultUpdateQuery());
    }
    
    public AssetLoadResult restoreOriginalAsset(final AssetPath originalAssetPath) {
        return this.restoreOriginalAsset(originalAssetPath, this.getDefaultUpdateQuery());
    }
    
    public boolean isValidData(final byte[] data) {
        return true;
    }
    
    @Nonnull
    public AssetEditorAssetType getConfig() {
        return this.config;
    }
    
    @Nonnull
    public Path getRootPath() {
        return this.rootPath;
    }
    
    public enum AssetLoadResult
    {
        ASSETS_UNCHANGED, 
        ASSETS_CHANGED, 
        COMMON_ASSETS_CHANGED;
    }
}
