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

package com.hypixel.hytale.server.core.ui.builder;

import com.hypixel.hytale.codec.codecs.map.MapCodec;
import com.hypixel.hytale.codec.ExtraInfo;
import javax.annotation.Nullable;
import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import javax.annotation.Nonnull;
import java.util.List;
import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBinding;
import com.hypixel.hytale.logger.HytaleLogger;

public class UIEventBuilder
{
    public static final HytaleLogger LOGGER;
    public static final CustomUIEventBinding[] EMPTY_EVENT_BINDING_ARRAY;
    @Nonnull
    private final List<CustomUIEventBinding> events;
    
    public UIEventBuilder() {
        this.events = new ObjectArrayList<CustomUIEventBinding>();
    }
    
    @Nonnull
    public UIEventBuilder addEventBinding(final CustomUIEventBindingType type, final String selector) {
        return this.addEventBinding(type, selector, null);
    }
    
    @Nonnull
    public UIEventBuilder addEventBinding(final CustomUIEventBindingType type, final String selector, final boolean locksInterface) {
        return this.addEventBinding(type, selector, null, locksInterface);
    }
    
    @Nonnull
    public UIEventBuilder addEventBinding(final CustomUIEventBindingType type, final String selector, final EventData data) {
        return this.addEventBinding(type, selector, data, true);
    }
    
    @Nonnull
    public UIEventBuilder addEventBinding(final CustomUIEventBindingType type, final String selector, @Nullable final EventData data, final boolean locksInterface) {
        String dataString = null;
        if (data != null) {
            final ExtraInfo extraInfo = ExtraInfo.THREAD_LOCAL.get();
            dataString = MapCodec.STRING_HASH_MAP_CODEC.encode(data.events(), extraInfo).asDocument().toJson();
            extraInfo.getValidationResults().logOrThrowValidatorExceptions(UIEventBuilder.LOGGER);
        }
        this.events.add(new CustomUIEventBinding(type, selector, dataString, locksInterface));
        return this;
    }
    
    @Nonnull
    public CustomUIEventBinding[] getEvents() {
        return this.events.toArray(CustomUIEventBinding[]::new);
    }
    
    static {
        LOGGER = HytaleLogger.forEnclosingClass();
        EMPTY_EVENT_BINDING_ARRAY = new CustomUIEventBinding[0];
    }
}
