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

package com.hypixel.hytale.builtin.buildertools.scriptedbrushes.commands;

import com.hypixel.hytale.builtin.buildertools.scriptedbrushes.BrushConfigCommandExecutor;
import com.hypixel.hytale.server.core.command.system.arguments.types.ArgumentType;
import com.hypixel.hytale.assetstore.map.JsonAssetWithMap;
import com.hypixel.hytale.server.core.command.system.arguments.types.AssetArgumentType;
import com.hypixel.hytale.builtin.buildertools.scriptedbrushes.ScriptedBrushAsset;
import com.hypixel.hytale.server.core.command.system.arguments.system.RequiredArg;
import com.hypixel.hytale.builtin.buildertools.scriptedbrushes.BrushConfig;
import com.hypixel.hytale.builtin.buildertools.PrototypePlayerBuilderToolSettings;
import java.util.UUID;
import com.hypixel.hytale.server.core.entity.entities.player.pages.CustomUIPage;
import com.hypixel.hytale.builtin.buildertools.scriptedbrushes.ui.ScriptedBrushPage;
import com.hypixel.hytale.server.core.entity.entities.Player;
import com.hypixel.hytale.builtin.buildertools.tooloperations.ToolOperation;
import com.hypixel.hytale.server.core.universe.world.World;
import com.hypixel.hytale.server.core.universe.PlayerRef;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.component.Store;
import com.hypixel.hytale.server.core.command.system.CommandContext;
import com.hypixel.hytale.server.core.command.system.AbstractCommand;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.core.Message;
import com.hypixel.hytale.server.core.command.system.basecommands.AbstractPlayerCommand;

public class BrushConfigLoadCommand extends AbstractPlayerCommand
{
    @Nonnull
    private static final Message MESSAGE_COMMANDS_BRUSH_CONFIG_CANNOT_USE_COMMAND_DURING_EXEC;
    
    public BrushConfigLoadCommand() {
        super("load", "Load a scripted brush by name, or open the brush picker UI if no name is provided");
        this.addUsageVariant(new LoadByNameCommand());
    }
    
    @Override
    protected void execute(@Nonnull final CommandContext context, @Nonnull final Store<EntityStore> store, @Nonnull final Ref<EntityStore> ref, @Nonnull final PlayerRef playerRef, @Nonnull final World world) {
        final UUID playerUUID = playerRef.getUuid();
        final PrototypePlayerBuilderToolSettings prototypeSettings = ToolOperation.getOrCreatePrototypeSettings(playerUUID);
        final BrushConfig brushConfig = prototypeSettings.getBrushConfig();
        if (brushConfig.isCurrentlyExecuting()) {
            playerRef.sendMessage(BrushConfigLoadCommand.MESSAGE_COMMANDS_BRUSH_CONFIG_CANNOT_USE_COMMAND_DURING_EXEC);
            return;
        }
        final Player playerComponent = store.getComponent(ref, Player.getComponentType());
        assert playerComponent != null;
        playerComponent.getPageManager().openCustomPage(ref, store, new ScriptedBrushPage(playerRef));
    }
    
    static {
        MESSAGE_COMMANDS_BRUSH_CONFIG_CANNOT_USE_COMMAND_DURING_EXEC = Message.translation("server.commands.brushConfig.cannotUseCommandDuringExec");
    }
    
    private static class LoadByNameCommand extends AbstractPlayerCommand
    {
        @Nonnull
        private static final Message MESSAGE_COMMANDS_BRUSH_CONFIG_CANNOT_USE_COMMAND_DURING_EXEC;
        @Nonnull
        private final RequiredArg<ScriptedBrushAsset> brushNameArg;
        
        public LoadByNameCommand() {
            super("Load a scripted brush by name");
            this.brushNameArg = this.withRequiredArg("brushName", "The name of the scripted brush asset to load", (ArgumentType<ScriptedBrushAsset>)new AssetArgumentType("server.commands.parsing.argtype.asset.scriptedbrush.name", (Class<JsonAssetWithMap>)ScriptedBrushAsset.class, "server.commands.parsing.argtype.asset.scriptedbrush.usage"));
        }
        
        @Override
        protected void execute(@Nonnull final CommandContext context, @Nonnull final Store<EntityStore> store, @Nonnull final Ref<EntityStore> ref, @Nonnull final PlayerRef playerRef, @Nonnull final World world) {
            final UUID playerUUID = playerRef.getUuid();
            final PrototypePlayerBuilderToolSettings prototypeSettings = ToolOperation.getOrCreatePrototypeSettings(playerUUID);
            final BrushConfig brushConfig = prototypeSettings.getBrushConfig();
            final BrushConfigCommandExecutor brushConfigCommandExecutor = prototypeSettings.getBrushConfigCommandExecutor();
            if (brushConfig.isCurrentlyExecuting()) {
                playerRef.sendMessage(LoadByNameCommand.MESSAGE_COMMANDS_BRUSH_CONFIG_CANNOT_USE_COMMAND_DURING_EXEC);
                return;
            }
            final ScriptedBrushAsset brushAssetArg = this.brushNameArg.get(context);
            brushAssetArg.loadIntoExecutor(brushConfigCommandExecutor);
            prototypeSettings.setCurrentlyLoadedBrushConfigName(brushAssetArg.getId());
            prototypeSettings.setUsePrototypeBrushConfigurations(true);
            playerRef.sendMessage(Message.translation("server.commands.brushConfig.loaded").param("name", brushAssetArg.getId()));
        }
        
        static {
            MESSAGE_COMMANDS_BRUSH_CONFIG_CANNOT_USE_COMMAND_DURING_EXEC = Message.translation("server.commands.brushConfig.cannotUseCommandDuringExec");
        }
    }
}
