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

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

import com.hypixel.hytale.codec.schema.config.Schema;
import com.hypixel.hytale.codec.schema.SchemaContext;
import com.hypixel.hytale.codec.validation.ValidationResults;
import javax.annotation.Nullable;
import com.hypixel.hytale.codec.validation.Validator;
import javax.annotation.Nonnull;

public class SoundFileValidators
{
    public static final ChannelValidator MONO;
    public static final ChannelValidator STEREO;
    private static final String MONO_STRING = "Mono";
    private static final String STEREO_STRING = "Stereo";
    
    @Nonnull
    public static String getEncoding(final int channelCount) {
        return switch (channelCount) {
            case 1 -> "Mono";
            case 2 -> "Stereo";
            default -> throw new IllegalArgumentException("Invalid channel count: " + channelCount);
        };
    }
    
    static {
        MONO = new ChannelValidator(1);
        STEREO = new ChannelValidator(2);
    }
    
    public static class ChannelValidator implements Validator<String>
    {
        private final int channelCount;
        
        public ChannelValidator(final int channelCount) {
            assert channelCount == 2;
            this.channelCount = channelCount;
        }
        
        @Override
        public void accept(@Nullable final String s, @Nonnull final ValidationResults results) {
            if (s == null) {
                return;
            }
            final OggVorbisInfoCache.OggVorbisInfo info = OggVorbisInfoCache.getNow(s);
            if (info == null) {
                results.fail("No such ogg file: " + s);
                return;
            }
            if (info.channels != this.channelCount) {
                results.fail("Sound file '" + s + "' is " + SoundFileValidators.getEncoding(info.channels) + " instead of " + SoundFileValidators.getEncoding(this.channelCount));
            }
        }
        
        @Override
        public void updateSchema(final SchemaContext context, final Schema target) {
        }
    }
}
