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

package com.hypixel.hytale.builtin.adventure.objectives;

import com.hypixel.hytale.codec.builder.BuilderCodec;
import com.hypixel.hytale.protocol.packets.interface_.Page;
import com.hypixel.hytale.server.core.entity.entities.Player;
import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType;
import com.hypixel.hytale.server.core.Message;
import com.hypixel.hytale.component.Store;
import com.hypixel.hytale.server.core.ui.builder.UIEventBuilder;
import com.hypixel.hytale.server.core.ui.builder.UICommandBuilder;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.core.universe.PlayerRef;
import com.hypixel.hytale.builtin.adventure.objectives.config.task.UseEntityObjectiveTaskAsset;
import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage;

public class DialogPage extends InteractiveCustomUIPage<DialogPageEventData>
{
    public static final String LAYOUT = "Pages/DialogPage.ui";
    private final UseEntityObjectiveTaskAsset.DialogOptions dialogOptions;
    
    public DialogPage(@Nonnull final PlayerRef playerRef, final UseEntityObjectiveTaskAsset.DialogOptions dialogOptions) {
        super(playerRef, CustomPageLifetime.CanDismissOrCloseThroughInteraction, DialogPageEventData.CODEC);
        this.dialogOptions = dialogOptions;
    }
    
    @Override
    public void build(@Nonnull final Ref<EntityStore> ref, @Nonnull final UICommandBuilder commandBuilder, @Nonnull final UIEventBuilder eventBuilder, @Nonnull final Store<EntityStore> store) {
        commandBuilder.append("Pages/DialogPage.ui");
        commandBuilder.set("#EntityName.Text", Message.translation(this.dialogOptions.getEntityNameKey()));
        commandBuilder.set("#Dialog.Text", Message.translation(this.dialogOptions.getDialogKey()));
        eventBuilder.addEventBinding(CustomUIEventBindingType.Activating, "#CloseButton");
    }
    
    @Override
    public void handleDataEvent(@Nonnull final Ref<EntityStore> ref, @Nonnull final Store<EntityStore> store, @Nonnull final DialogPageEventData data) {
        final Player playerComponent = store.getComponent(ref, Player.getComponentType());
        playerComponent.getPageManager().setPage(ref, store, Page.None);
    }
    
    public static class DialogPageEventData
    {
        public static final BuilderCodec<DialogPageEventData> CODEC;
        
        static {
            CODEC = BuilderCodec.builder(DialogPageEventData.class, DialogPageEventData::new).build();
        }
    }
}
