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

package com.hypixel.hytale.assetstore;

import java.util.Iterator;
import com.hypixel.hytale.logger.backend.HytaleLoggerBackend;
import com.hypixel.hytale.logger.util.GithubMessageUtil;
import javax.annotation.Nullable;
import java.nio.file.Path;
import com.hypixel.hytale.logger.HytaleLogger;
import java.util.HashSet;
import javax.annotation.Nonnull;
import com.hypixel.hytale.codec.ExtraInfo;
import java.util.Set;
import com.hypixel.hytale.codec.validation.ValidationResults;

public class AssetValidationResults extends ValidationResults
{
    private Set<Class<? extends JsonAsset>> disabledMissingAssetClasses;
    
    public AssetValidationResults(final ExtraInfo extraInfo) {
        super(extraInfo);
    }
    
    public void handleMissingAsset(final String field, @Nonnull final Class<? extends JsonAsset> assetType, final Object assetId) {
        if (this.disabledMissingAssetClasses != null && this.disabledMissingAssetClasses.contains(assetType)) {
            return;
        }
        throw new MissingAssetException(field, assetType, assetId);
    }
    
    public void handleMissingAsset(final String field, @Nonnull final Class<? extends JsonAsset> assetType, final Object assetId, final String extra) {
        if (this.disabledMissingAssetClasses != null && this.disabledMissingAssetClasses.contains(assetType)) {
            return;
        }
        throw new MissingAssetException(field, assetType, assetId, extra);
    }
    
    public void disableMissingAssetFor(final Class<? extends JsonAsset> assetType) {
        if (this.disabledMissingAssetClasses == null) {
            this.disabledMissingAssetClasses = new HashSet<Class<? extends JsonAsset>>();
        }
        this.disabledMissingAssetClasses.add(assetType);
    }
    
    @Override
    public void logOrThrowValidatorExceptions(@Nonnull final HytaleLogger logger, @Nonnull final String msg) {
        this.logOrThrowValidatorExceptions(logger, msg, null, 0);
    }
    
    public void logOrThrowValidatorExceptions(@Nonnull final HytaleLogger logger, @Nonnull final String msg, @Nullable Path path, final int lineOffset) {
        if (GithubMessageUtil.isGithub() && this.validatorExceptions != null && !this.validatorExceptions.isEmpty()) {
            for (final ValidatorResultsHolder holder : this.validatorExceptions) {
                String file = "unknown";
                if (path == null) {
                    final ExtraInfo extraInfo = this.extraInfo;
                    if (extraInfo instanceof AssetExtraInfo) {
                        final AssetExtraInfo<?> assetExtraInfo = (AssetExtraInfo<?>)extraInfo;
                        path = assetExtraInfo.getAssetPath();
                    }
                }
                if (path != null) {
                    file = path.toString();
                }
                for (final ValidationResult result : holder.results()) {
                    HytaleLoggerBackend.rawLog(switch (result.result()) {
                        default -> throw new MatchException(null, null);
                        case SUCCESS -> "";
                        case WARNING -> (holder.line() == -1) ? GithubMessageUtil.messageWarning(file, result.reason()) : GithubMessageUtil.messageWarning(file, holder.line() + lineOffset, holder.column(), result.reason());
                        case FAIL -> (holder.line() == -1) ? GithubMessageUtil.messageError(file, result.reason()) : GithubMessageUtil.messageError(file, holder.line() + lineOffset, holder.column(), result.reason());
                    });
                }
            }
        }
        super.logOrThrowValidatorExceptions(logger, msg);
    }
}
