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

package com.hypixel.hytale.server.core.command.commands.utility;

import com.hypixel.hytale.server.core.command.system.arguments.system.Argument;
import java.util.regex.Pattern;
import java.util.Iterator;
import com.hypixel.hytale.server.core.util.EventTitleUtil;
import com.hypixel.hytale.server.core.universe.PlayerRef;
import com.hypixel.hytale.server.core.universe.world.World;
import com.hypixel.hytale.server.core.universe.Universe;
import com.hypixel.hytale.server.core.command.system.CommandUtil;
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 com.hypixel.hytale.server.core.command.system.arguments.system.OptionalArg;
import com.hypixel.hytale.server.core.command.system.arguments.system.DefaultArg;
import com.hypixel.hytale.server.core.command.system.arguments.system.FlagArg;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.core.Message;
import com.hypixel.hytale.server.core.command.system.basecommands.CommandBase;

public class EventTitleCommand extends CommandBase
{
    @Nonnull
    private static final Message MESSAGE_COMMANDS_EVENT_TITLE_TITLE_REQUIRED;
    @Nonnull
    private final FlagArg majorFlag;
    @Nonnull
    private final DefaultArg<String> secondaryTitleArg;
    @Nonnull
    private final OptionalArg<String> primaryTitleArg;
    
    public EventTitleCommand() {
        super("eventtitle", "server.commands.eventtitle.desc");
        this.majorFlag = this.withFlagArg("major", "server.commands.eventtitle.major.desc");
        this.secondaryTitleArg = this.withDefaultArg("secondary", "server.commands.eventtitle.secondary.desc", ArgTypes.STRING, "Event", "server.commands.eventtitle.secondary.defaultDesc");
        this.primaryTitleArg = this.withOptionalArg("title", "server.commands.eventtitle.title.desc", ArgTypes.STRING);
        this.setAllowsExtraArguments(true);
    }
    
    @Override
    protected void executeSync(@Nonnull final CommandContext context) {
        String primaryTitleText;
        if (this.primaryTitleArg.provided(context)) {
            primaryTitleText = this.primaryTitleArg.get(context).replace("\"", "");
        }
        else {
            final String inputString = context.getInputString();
            final String rawArgs = CommandUtil.stripCommandName(inputString);
            if (rawArgs.trim().isEmpty()) {
                context.sendMessage(EventTitleCommand.MESSAGE_COMMANDS_EVENT_TITLE_TITLE_REQUIRED);
                return;
            }
            primaryTitleText = this.extractTitleFromRawInput(rawArgs, context);
            if (primaryTitleText.trim().isEmpty()) {
                context.sendMessage(EventTitleCommand.MESSAGE_COMMANDS_EVENT_TITLE_TITLE_REQUIRED);
                return;
            }
        }
        final Message primaryTitle = Message.raw(primaryTitleText);
        final Message secondaryTitle = Message.raw(this.secondaryTitleArg.get(context));
        final boolean isMajor = ((Argument<Arg, Boolean>)this.majorFlag).get(context);
        for (final World world : Universe.get().getWorlds().values()) {
            for (final PlayerRef playerRef : world.getPlayerRefs()) {
                EventTitleUtil.showEventTitleToPlayer(playerRef, primaryTitle, secondaryTitle, isMajor);
            }
        }
    }
    
    @Nonnull
    private String extractTitleFromRawInput(@Nonnull final String rawArgs, @Nonnull final CommandContext context) {
        String titleText = rawArgs.trim();
        if (((Argument<Arg, Boolean>)this.majorFlag).get(context)) {
            titleText = titleText.replaceAll("--major\\b", "").trim();
        }
        if (this.secondaryTitleArg.provided(context)) {
            final String secondaryValue = this.secondaryTitleArg.get(context);
            titleText = titleText.replaceAll("--secondary\\s*=\\s*" + Pattern.quote(secondaryValue), "");
            titleText = titleText.replaceAll("--secondary\\s+" + Pattern.quote(secondaryValue), "");
        }
        else {
            titleText = titleText.replaceAll("--secondary\\s*=\\s*[^\\s]+", "");
            titleText = titleText.replaceAll("--secondary\\s+[^\\s]+", "");
        }
        return titleText.trim();
    }
    
    static {
        MESSAGE_COMMANDS_EVENT_TITLE_TITLE_REQUIRED = Message.translation("server.commands.eventtitle.titleRequired");
    }
}
