001package fr.aumgn.dac2.commands.arg;
002
003import org.bukkit.command.CommandSender;
004import org.bukkit.entity.Player;
005
006import fr.aumgn.bukkitutils.command.arg.impl.AsbtractSenderArg;
007import fr.aumgn.bukkitutils.command.exception.CommandError;
008import fr.aumgn.bukkitutils.command.exception.CommandUsageError;
009
010import fr.aumgn.dac2.DAC;
011import fr.aumgn.dac2.arena.Arena;
012import fr.aumgn.dac2.stage.Stage;
013
014public class StageArg extends AsbtractSenderArg<Stage> {
015
016    public static class NoStageForArena extends CommandError {
017
018        private static final long serialVersionUID = 8898579114644791040L;
019
020        public NoStageForArena(DAC dac, Arena arena) {
021            super(dac.getCmdMessages()
022                    .get("stage.arg.nostageforarena", arena.getName()));
023        }
024    }
025
026    public static class NoStageForPlayer extends CommandError {
027
028        private static final long serialVersionUID = 2665340229475254801L;
029
030        public NoStageForPlayer(DAC dac) {
031            super(dac.getCmdMessages()
032                    .get("stage.arg.nostageforplayer"));
033        }
034    }
035
036    private final DAC dac;
037
038    public StageArg(DAC dac, String string) {
039        super(string);
040        this.dac = dac;
041    }
042
043    @Override
044    public Stage value() {
045        if (!dac.getArenas().has(string)) {
046            throw new ArenaArg.NoSuchArena(dac, string);
047        }
048
049        Arena arena = dac.getArenas().get(string);
050        Stage stage = dac.getStages().get(arena);
051        if (stage == null) {
052            throw new NoStageForArena(dac, arena);
053        }
054
055        return stage;
056    }
057
058    @Override
059    protected Stage defaultFor(CommandSender sender) {
060        if (!(sender instanceof Player)) {
061            throw new CommandUsageError(dac.getCmdMessages()
062                    .get("stage.arg.needed"));
063        }
064
065        Stage stage = dac.getStages().get((Player) sender);
066        if (stage == null) {
067            throw new NoStageForPlayer(dac);
068        }
069
070        return stage;
071    }
072
073    @Override
074    protected String missingPermOtherMessage(String permission) {
075        return dac.getCmdMessages().get("stage.arg.otherpermissionmissing");
076    }
077}