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

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

import com.hypixel.hytale.codec.util.RawJsonReader;
import java.util.logging.Level;
import org.bson.BsonDocument;
import java.nio.charset.StandardCharsets;
import com.hypixel.hytale.builtin.asseteditor.EditorClient;
import com.hypixel.hytale.assetstore.AssetUpdateQuery;
import java.nio.file.Path;
import com.hypixel.hytale.builtin.asseteditor.AssetPath;
import javax.annotation.Nonnull;
import com.hypixel.hytale.protocol.packets.asseteditor.AssetEditorAssetType;
import com.hypixel.hytale.logger.HytaleLogger;

public abstract class JsonTypeHandler extends AssetTypeHandler
{
    private static final HytaleLogger LOGGER;
    
    protected JsonTypeHandler(@Nonnull final AssetEditorAssetType config) {
        super(config);
    }
    
    @Override
    public AssetLoadResult loadAsset(final AssetPath path, final Path dataPath, final byte[] data, final AssetUpdateQuery updateQuery, final EditorClient editorClient) {
        BsonDocument doc;
        try {
            doc = BsonDocument.parse(new String(data, StandardCharsets.UTF_8));
        }
        catch (final Exception exception) {
            JsonTypeHandler.LOGGER.at(Level.WARNING).withCause(exception).log("Failed to parse JSON for " + String.valueOf(path));
            return AssetLoadResult.ASSETS_UNCHANGED;
        }
        return this.loadAssetFromDocument(path, dataPath, doc, updateQuery, editorClient);
    }
    
    public abstract AssetLoadResult loadAssetFromDocument(final AssetPath p0, final Path p1, final BsonDocument p2, final AssetUpdateQuery p3, final EditorClient p4);
    
    public AssetLoadResult loadAssetFromDocument(final AssetPath path, final Path dataPath, final BsonDocument document, final EditorClient editorClient) {
        return this.loadAssetFromDocument(path, dataPath, document, this.getDefaultUpdateQuery(), editorClient);
    }
    
    @Override
    public boolean isValidData(@Nonnull final byte[] data) {
        try {
            final String str = new String(data, StandardCharsets.UTF_8);
            final char[] buffer = str.toCharArray();
            RawJsonReader.validateBsonDocument(new RawJsonReader(buffer));
        }
        catch (final Exception exception) {
            return false;
        }
        return true;
    }
    
    static {
        LOGGER = HytaleLogger.forEnclosingClass();
    }
}
