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

package com.hypixel.hytale.assetstore;

import com.hypixel.hytale.codec.validation.ValidationResults;
import com.hypixel.hytale.codec.ExtraInfo;
import javax.annotation.Nonnull;

public class MissingAssetException extends RuntimeException
{
    private String field;
    private Class<? extends JsonAsset> assetType;
    private Object assetId;
    
    public MissingAssetException(final String field, @Nonnull final Class<? extends JsonAsset> assetType, final Object assetId) {
        super("Missing asset '" + String.valueOf(assetId) + "' of type " + assetType.getSimpleName() + " for field '" + field + "'!");
        this.field = field;
        this.assetType = assetType;
        this.assetId = assetId;
    }
    
    public MissingAssetException(final String field, @Nonnull final Class<? extends JsonAsset> assetType, final Object assetId, final String extra) {
        super("Missing asset '" + String.valueOf(assetId) + "' of type " + assetType.getSimpleName() + " for field '" + field + "'! " + extra);
        this.field = field;
        this.assetType = assetType;
        this.assetId = assetId;
    }
    
    public String getField() {
        return this.field;
    }
    
    public Class<? extends JsonAsset> getAssetType() {
        return this.assetType;
    }
    
    public Object getAssetId() {
        return this.assetId;
    }
    
    public static void handle(@Nonnull final ExtraInfo extraInfo, final String field, @Nonnull final Class<? extends JsonAsset> assetType, final Object assetId) {
        final ValidationResults validationResults = extraInfo.getValidationResults();
        if (validationResults instanceof final AssetValidationResults assetValidationResults) {
            assetValidationResults.handleMissingAsset(field, assetType, assetId);
            return;
        }
        throw new MissingAssetException(field, assetType, assetId);
    }
    
    public static void handle(@Nonnull final ExtraInfo extraInfo, final String field, @Nonnull final Class<? extends JsonAsset> assetType, final Object assetId, final String extra) {
        final ValidationResults validationResults = extraInfo.getValidationResults();
        if (validationResults instanceof final AssetValidationResults assetValidationResults) {
            assetValidationResults.handleMissingAsset(field, assetType, assetId, extra);
            return;
        }
        throw new MissingAssetException(field, assetType, assetId, extra);
    }
}
