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

package com.hypixel.hytale.server.npc.commands;

import java.util.Iterator;
import com.hypixel.hytale.server.npc.role.support.CombatSupport;
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.universe.world.World;
import com.hypixel.hytale.server.npc.entities.NPCEntity;
import com.hypixel.hytale.server.core.command.system.CommandContext;
import com.hypixel.hytale.server.core.command.system.arguments.types.ArgumentType;
import com.hypixel.hytale.server.core.command.system.arguments.types.ArgTypes;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.core.modules.interaction.interaction.config.Interaction;
import java.util.List;
import com.hypixel.hytale.server.core.command.system.arguments.system.OptionalArg;
import com.hypixel.hytale.server.core.command.system.AbstractCommand;
import com.hypixel.hytale.server.core.command.system.basecommands.AbstractCommandCollection;

public class NPCAttackCommand extends AbstractCommandCollection
{
    public NPCAttackCommand() {
        super("attack", "server.commands.npc.attack.desc");
        this.addSubCommand(new SetAttackCommand());
        this.addSubCommand(new ClearAttackCommand());
    }
    
    public static class SetAttackCommand extends NPCWorldCommandBase
    {
        @Nonnull
        private final OptionalArg<List<Interaction>> attackArg;
        
        public SetAttackCommand() {
            super("", "server.commands.npc.attack.desc");
            this.attackArg = this.withListOptionalArg("attack", "server.commands.npc.attack.sequence", ArgTypes.INTERACTION_ASSET);
        }
        
        @Override
        protected void execute(@Nonnull final CommandContext context, @Nonnull final NPCEntity npc, @Nonnull final World world, @Nonnull final Store<EntityStore> store, @Nonnull final Ref<EntityStore> ref) {
            if (!this.attackArg.provided(context)) {
                return;
            }
            final List<Interaction> sequences = this.attackArg.get(context);
            final CombatSupport combatSupport = npc.getRole().getCombatSupport();
            combatSupport.clearAttackOverrides();
            for (final Interaction sequence : sequences) {
                combatSupport.addAttackOverride(sequence.getId());
            }
        }
    }
    
    public static class ClearAttackCommand extends NPCWorldCommandBase
    {
        public ClearAttackCommand() {
            super("clear", "server.commands.npc.attack.clear.desc");
        }
        
        @Override
        protected void execute(@Nonnull final CommandContext context, @Nonnull final NPCEntity npc, @Nonnull final World world, @Nonnull final Store<EntityStore> store, @Nonnull final Ref<EntityStore> ref) {
            npc.getRole().getCombatSupport().clearAttackOverrides();
        }
    }
}
