package org.dreamexposure.discal.client.module.command;

import discord4j.core.event.domain.message.MessageCreateEvent;
import discord4j.core.object.entity.Message;
import org.dreamexposure.discal.client.calendar.CalendarCreator;
import org.dreamexposure.discal.client.message.CalendarMessageFormatter;
import org.dreamexposure.discal.client.message.MessageManager;
import org.dreamexposure.discal.core.database.DatabaseManager;
import org.dreamexposure.discal.core.object.GuildSettings;
import org.dreamexposure.discal.core.object.calendar.CalendarCreatorResponse;
import org.dreamexposure.discal.core.object.calendar.CalendarData;
import org.dreamexposure.discal.core.object.calendar.PreCalendar;
import org.dreamexposure.discal.core.object.command.CommandInfo;
import org.dreamexposure.discal.core.utils.CalendarUtils;
import org.dreamexposure.discal.core.utils.GeneralUtils;
import org.dreamexposure.discal.core.utils.PermissionChecker;
import org.dreamexposure.discal.core.utils.TimeZoneUtils;

import java.util.ArrayList;

/**
 * Created by Nova Fox on 1/4/2017.
 * Website: www.cloudcraftgaming.com
 * For Project: DisCal
 */
@SuppressWarnings({"FieldCanBeLocal", "Duplicates"})
public class CalendarCommand implements ICommand {
	private String TIME_ZONE_DB = "http://www.joda.org/joda-time/timezones.html";

	/**
	 * Gets the command this Object is responsible for.
	 *
	 * @return The command this Object is responsible for.
	 */
	@Override
	public String getCommand() {
		return "calendar";
	}

	/**
	 * Gets the short aliases of the command this object is responsible for.
	 * </br>
	 * This will return an empty ArrayList if none are present
	 *
	 * @return The aliases of the command.
	 */
	@Override
	public ArrayList<String> getAliases() {
		ArrayList<String> aliases = new ArrayList<>();
		aliases.add("cal");
		aliases.add("callador");
		return aliases;
	}

	/**
	 * Gets the info on the command (not sub command) to be used in help menus.
	 *
	 * @return The command info.
	 */
	@Override
	public CommandInfo getCommandInfo() {
		CommandInfo info = new CommandInfo("calendar");
		info.setDescription("Used for direct interaction with your DisCal Calendar.");
		info.setExample("!calendar <subCommand> (value)");

		info.getSubCommands().put("create", "Starts the creation of a new calendar.");
		info.getSubCommands().put("cancel", "Cancels the creator/editor");
		info.getSubCommands().put("view", "Views the calendar in the creator/editor");
		info.getSubCommands().put("review", "Views the calendar in the creator/editor");
		info.getSubCommands().put("confirm", "Confirms and creates/edits the calendar.");
		info.getSubCommands().put("delete", "Deletes the calendar");
		info.getSubCommands().put("remove", "Deletes the calendar");
		info.getSubCommands().put("name", "Sets the calendar's name/summary");
		info.getSubCommands().put("summary", "Sets the calendar's name/summary");
		info.getSubCommands().put("description", "Sets the calendar's description");
		info.getSubCommands().put("timezone", "Sets teh calendar's timezone.");
		info.getSubCommands().put("edit", "Edits the calendar.");

		return info;
	}

	/**
	 * Issues the command this Object is responsible for.
	 *
	 * @param args  The command arguments.
	 * @param event The event received.
	 * @return <code>true</code> if successful, else <code>false</code>.
	 */
	@Override
	public boolean issueCommand(String[] args, MessageCreateEvent event, GuildSettings settings) {
		if (args.length < 1) {
			MessageManager.sendMessageAsync(MessageManager.getMessage("Notification.Args.Few", settings), event);
		} else {
			//TODO: Add support for multiple calendars...
			CalendarData calendarData = DatabaseManager.getManager().getMainCalendar(settings.getGuildID());

			switch (args[0].toLowerCase()) {
				case "create":
					if (PermissionChecker.hasSufficientRole(event))
						moduleCreate(args, event, calendarData, settings);
					else
						MessageManager.sendMessageAsync(MessageManager.getMessage("Notification.Perm.CONTROL_ROLE", settings), event);
					break;
				case "cancel":
					if (PermissionChecker.hasSufficientRole(event))
						moduleCancel(event, calendarData, settings);
					else
						MessageManager.sendMessageAsync(MessageManager.getMessage("Notification.Perm.CONTROL_ROLE", settings), event);
					break;
				case "view":
				case "review":
					moduleView(event, calendarData, settings);
					break;
				case "confirm":
					if (PermissionChecker.hasSufficientRole(event))
						moduleConfirm(event, calendarData, settings);
					else
						MessageManager.sendMessageAsync(MessageManager.getMessage("Notification.Perm.CONTROL_ROLE", settings), event);
					break;
				case "delete":
				case "remove":
					if (PermissionChecker.hasSufficientRole(event))
						moduleDelete(event, calendarData, settings);
					else
						MessageManager.sendMessageAsync(MessageManager.getMessage("Notification.Perm.CONTROL_ROLE", settings), event);
					break;
				case "name":
				case "summary":
					moduleSummary(args, event, calendarData, settings);
					break;
				case "description":
					moduleDescription(args, event, calendarData, settings);
					break;
				case "timezone":
					moduleTimezone(args, event, calendarData, settings);
					break;
				case "edit":
					if (PermissionChecker.hasSufficientRole(event))
						moduleEdit(event, calendarData, settings);
					else
						MessageManager.sendMessageAsync(MessageManager.getMessage("Notification.Perm.CONTROL_ROLE", settings), event);
					break;
				default:
					MessageManager.sendMessageAsync(MessageManager.getMessage("Notification.Args.Invalid", settings), event);
					break;
			}
		}
		return false;
	}

	private void moduleCreate(String[] args, MessageCreateEvent event, CalendarData calendarData, GuildSettings settings) {
		if (CalendarCreator.getCreator().hasPreCalendar(settings.getGuildID())) {
			if (CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()).getCreatorMessage() != null) {
				MessageManager.deleteMessage(event);
				MessageManager.deleteMessage(CalendarCreator.getCreator().getCreatorMessage(settings.getGuildID()));
				CalendarCreator.getCreator().setCreatorMessage(MessageManager.sendMessageSync(MessageManager.getMessage("Creator.Calendar.AlreadyInit", settings), CalendarMessageFormatter.getPreCalendarEmbed(CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()), settings), event));
			} else {
				MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.AlreadyInit", settings), event);
			}
		} else {
			if (calendarData.getCalendarId().equalsIgnoreCase("primary")) {
				if (args.length > 1) {
					String name = GeneralUtils.getContent(args, 1);
					PreCalendar calendar = CalendarCreator.getCreator().init(event, name, settings, true);
					if (calendar.getCreatorMessage() != null)
						MessageManager.deleteMessage(event);
					else
						MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.Create.Init", settings), event);
				} else {
					MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.Create.Name", settings), event);
				}
			} else {
				MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.HasCalendar", settings), event);
			}
		}
	}

	private void moduleCancel(MessageCreateEvent event, CalendarData calendarData, GuildSettings settings) {
		if (CalendarCreator.getCreator().hasPreCalendar(settings.getGuildID())) {
			Message message = CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()).getCreatorMessage();
			boolean editing = CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()).isEditing();
			if (CalendarCreator.getCreator().terminate(settings.getGuildID())) {
				if (message != null) {
					if (!editing) {
						MessageManager.deleteMessage(event);
						MessageManager.deleteMessage(CalendarCreator.getCreator().getCreatorMessage(settings.getGuildID()));
					} else {
						MessageManager.deleteMessage(event);
						MessageManager.deleteMessage(CalendarCreator.getCreator().getCreatorMessage(settings.getGuildID()));
						CalendarCreator.getCreator().setCreatorMessage(MessageManager.sendMessageSync(MessageManager.getMessage("Creator.Calendar.Cancel.Edit.Success", settings), event));
					}
				} else {
					if (!editing)
						MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.Cancel.Success", settings), event);
					else
						MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.Cancel.Edit.Success", settings), event);
				}
			} else {
				MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.Cancel.Failure", settings), event);
				MessageManager.deleteMessage(event);
			}
		} else {
			if (calendarData.getCalendarId().equalsIgnoreCase("primary"))
				MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.NotInit", settings), event);
			else
				MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.HasCalendar", settings), event);
		}
	}

	private void moduleView(MessageCreateEvent event, CalendarData calendarData, GuildSettings settings) {
		if (CalendarCreator.getCreator().hasPreCalendar(settings.getGuildID())) {
			PreCalendar preCalendar = CalendarCreator.getCreator().getPreCalendar(settings.getGuildID());
			if (preCalendar.getCreatorMessage() != null) {
				MessageManager.deleteMessage(event);
				MessageManager.deleteMessage(CalendarCreator.getCreator().getCreatorMessage(settings.getGuildID()));
				CalendarCreator.getCreator().setCreatorMessage(MessageManager.sendMessageSync(MessageManager.getMessage("Creator.Calendar.Review", settings), CalendarMessageFormatter.getPreCalendarEmbed(CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()), settings), event));
			} else {
				MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.Review", settings), CalendarMessageFormatter.getPreCalendarEmbed(preCalendar, settings), event);
			}
		} else {
			if (calendarData.getCalendarId().equalsIgnoreCase("primary"))
				MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.NoCalendar", settings), event);
			else
				MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.HasCalendar", settings), event);
		}
	}

	private void moduleConfirm(MessageCreateEvent event, CalendarData calendarData, GuildSettings settings) {
		if (CalendarCreator.getCreator().hasPreCalendar(settings.getGuildID())) {
			CalendarCreatorResponse response = CalendarCreator.getCreator().confirmCalendar(event, settings);
			if (response.isSuccessful()) {
				if (response.isEdited()) {
					if (response.getCreatorMessage() != null) {
						MessageManager.deleteMessage(event);
						MessageManager.deleteMessage(response.getCreatorMessage());
						MessageManager.sendMessageSync(MessageManager.getMessage("Creator.Calendar.Confirm.Edit.Success", settings), CalendarMessageFormatter.getCalendarLinkEmbed(response.getCalendar(), settings), event);
					} else {
						MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.Confirm.Edit.Success", settings), CalendarMessageFormatter.getCalendarLinkEmbed(response.getCalendar(), settings), event);
					}
				} else {
					if (response.getCreatorMessage() != null) {
						MessageManager.deleteMessage(event);
						MessageManager.deleteMessage(response.getCreatorMessage());
						MessageManager.sendMessageSync(MessageManager.getMessage("Creator.Calendar.Confirm.Create.Success", settings), CalendarMessageFormatter.getCalendarLinkEmbed(response.getCalendar(), settings), event);
					} else {
						MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.Confirm.Create.Success", settings), CalendarMessageFormatter.getCalendarLinkEmbed(response.getCalendar(), settings), event);
					}
				}
			} else {
				if (response.isEdited()) {
					if (response.getCreatorMessage() != null) {
						MessageManager.deleteMessage(event);
						MessageManager.deleteMessage(CalendarCreator.getCreator().getCreatorMessage(settings.getGuildID()));
						CalendarCreator.getCreator().setCreatorMessage(MessageManager.sendMessageSync(MessageManager.getMessage("Creator.Calendar.Confirm.Edit.Failure", settings), CalendarMessageFormatter.getPreCalendarEmbed(CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()), settings), event));
					} else {
						MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.Confirm.Edit.Failure", settings), event);
					}
				} else {
					if (response.getCreatorMessage() != null) {
						MessageManager.deleteMessage(event);
						MessageManager.deleteMessage(CalendarCreator.getCreator().getCreatorMessage(settings.getGuildID()));
						CalendarCreator.getCreator().setCreatorMessage(MessageManager.sendMessageSync(MessageManager.getMessage("Creator.Calendar.Confirm.Create.Failure", settings), CalendarMessageFormatter.getPreCalendarEmbed(CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()), settings), event));
					} else {
						MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.Confirm.Create.Failure", settings), event);
					}
				}
			}
		} else {
			if (calendarData.getCalendarId().equalsIgnoreCase("primary"))
				MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.NoCalendar", settings), event);
			else
				MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.HasCalendar", settings), event);
		}
	}

	private void moduleDelete(MessageCreateEvent event, CalendarData calendarData, GuildSettings settings) {
		if (CalendarCreator.getCreator().hasPreCalendar(settings.getGuildID())) {
			if (CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()).getCreatorMessage() != null) {
				MessageManager.deleteMessage(event);
				MessageManager.deleteMessage(CalendarCreator.getCreator().getCreatorMessage(settings.getGuildID()));
				CalendarCreator.getCreator().setCreatorMessage(MessageManager.sendMessageSync(MessageManager.getMessage("Creator.Calendar.Delete.Failure.InCreator", settings), CalendarMessageFormatter.getPreCalendarEmbed(CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()), settings), event));
			} else {
				MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.Delete.Failure.InCreator", settings), event);
			}
			return;
		}
		if (!PermissionChecker.hasManageServerRole(event)) {
			MessageManager.sendMessageAsync(MessageManager.getMessage("Notification.Perm.MANAGE_SERVER", settings), event);
			return;
		}
		if (!calendarData.getCalendarId().equalsIgnoreCase("primary")) {
			//Delete calendar
			if (CalendarUtils.deleteCalendar(calendarData, settings))
				MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.Delete.Success", settings), event);
			else
				MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.Delete.Failure.Unknown", settings), event);
		} else {
			//No calendar to delete
			MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.Delete.Failure.NoCalendar", settings), event);
		}
	}

	private void moduleSummary(String[] args, MessageCreateEvent event, CalendarData calendarData, GuildSettings settings) {
		if (args.length > 1) {
			if (CalendarCreator.getCreator().hasPreCalendar(settings.getGuildID())) {
				if (CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()).getCreatorMessage() != null) {
					CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()).setSummary(GeneralUtils.getContent(args, 1));
					MessageManager.deleteMessage(event);
					MessageManager.deleteMessage(CalendarCreator.getCreator().getCreatorMessage(settings.getGuildID()));
					CalendarCreator.getCreator().setCreatorMessage(MessageManager.sendMessageSync(MessageManager.getMessage("Creator.Calendar.Summary.N.Success", settings), CalendarMessageFormatter.getPreCalendarEmbed(CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()), settings), event));
				} else {
					String msg = MessageManager.getMessage("Creator.Calendar.Summary.O.Success", "%summary%", GeneralUtils.getContent(args, 1), settings);
					MessageManager.sendMessageAsync(msg, event);
				}
			} else {
				if (calendarData.getCalendarId().equalsIgnoreCase("primary"))
					MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.NoCalendar", settings), event);
				else
					MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.HasCalendar", settings), event);
			}
		} else {
			if (CalendarCreator.getCreator().hasPreCalendar(settings.getGuildID())) {
				if (CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()).getCreatorMessage() != null) {
					MessageManager.deleteMessage(event);
					MessageManager.deleteMessage(CalendarCreator.getCreator().getCreatorMessage(settings.getGuildID()));
					CalendarCreator.getCreator().setCreatorMessage(MessageManager.sendMessageSync(MessageManager.getMessage("Creator.Calendar.Summary.Specify", settings), CalendarMessageFormatter.getPreCalendarEmbed(CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()), settings), event));
				} else {
					MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.Summary.Specify", settings), event);
				}
			} else {
				MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.Summary.Specify", settings), event);
			}
		}
	}

	private void moduleDescription(String[] args, MessageCreateEvent event, CalendarData calendarData, GuildSettings settings) {
		if (args.length > 1) {
			if (CalendarCreator.getCreator().hasPreCalendar(settings.getGuildID())) {
				CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()).setDescription(GeneralUtils.getContent(args, 1));
				if (CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()).getCreatorMessage() != null) {
					MessageManager.deleteMessage(event);
					MessageManager.deleteMessage(CalendarCreator.getCreator().getCreatorMessage(settings.getGuildID()));
					CalendarCreator.getCreator().setCreatorMessage(MessageManager.sendMessageSync(MessageManager.getMessage("Creator.Calendar.Description.N.Success", settings) + TIME_ZONE_DB, CalendarMessageFormatter.getPreCalendarEmbed(CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()), settings), event));
				} else {
					MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.Description.O.Success", "%desc%", GeneralUtils.getContent(args, 1), settings) + TIME_ZONE_DB, event);
				}
			} else {
				if (calendarData.getCalendarId().equalsIgnoreCase("primary"))
					MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.NoCalendar", settings), event);
				else
					MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.HasCalendar", settings), event);
			}
		} else {
			if (CalendarCreator.getCreator().hasPreCalendar(settings.getGuildID())) {
				if (CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()).getCreatorMessage() != null) {
					MessageManager.deleteMessage(event);
					MessageManager.deleteMessage(CalendarCreator.getCreator().getCreatorMessage(settings.getGuildID()));
					CalendarCreator.getCreator().setCreatorMessage(MessageManager.sendMessageSync(MessageManager.getMessage("Creator.Calendar.Description.Specify", settings), CalendarMessageFormatter.getPreCalendarEmbed(CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()), settings), event));
				} else {
					MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.Description.Specify", settings), event);
				}
			} else {
				MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.Description.Specify", settings), event);
			}
		}
	}

	private void moduleTimezone(String[] args, MessageCreateEvent event, CalendarData calendarData, GuildSettings settings) {
		if (args.length == 2) {
			String value = args[1];
			if (CalendarCreator.getCreator().hasPreCalendar(settings.getGuildID())) {
				if (TimeZoneUtils.isValid(value)) {
					CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()).setTimezone(value);

					if (CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()).getCreatorMessage() != null) {
						MessageManager.deleteMessage(event);
						MessageManager.deleteMessage(CalendarCreator.getCreator().getCreatorMessage(settings.getGuildID()));
						CalendarCreator.getCreator().setCreatorMessage(MessageManager.sendMessageSync(MessageManager.getMessage("Creator.Calendar.TimeZone.N.Success", settings), CalendarMessageFormatter.getPreCalendarEmbed(CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()), settings), event));
					} else {
						MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.TimeZone.O.Success", "%tz%", value, settings), event);
					}
				} else {
					if (CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()).getCreatorMessage() != null) {
						MessageManager.deleteMessage(event);
						MessageManager.deleteMessage(CalendarCreator.getCreator().getCreatorMessage(settings.getGuildID()));
						CalendarCreator.getCreator().setCreatorMessage(MessageManager.sendMessageSync(MessageManager.getMessage("Creator.Calendar.TimeZone.Invalid", "%tz_db%", TIME_ZONE_DB, settings), CalendarMessageFormatter.getPreCalendarEmbed(CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()), settings), event));
					} else {
						MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.TimeZone.Invalid", "%tz_db%", TIME_ZONE_DB, settings), event);
					}
				}
			} else {
				if (calendarData.getCalendarId().equalsIgnoreCase("primary"))
					MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.NoCalendar", settings), event);
				else
					MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.HasCalendar", settings), event);
			}
		} else {
			if (CalendarCreator.getCreator().hasPreCalendar(settings.getGuildID())) {
				MessageManager.deleteMessage(event);
				MessageManager.deleteMessage(CalendarCreator.getCreator().getCreatorMessage(settings.getGuildID()));
				CalendarCreator.getCreator().setCreatorMessage(MessageManager.sendMessageSync(MessageManager.getMessage("Creator.Calendar.TimeZone.Specify", settings) + TIME_ZONE_DB, CalendarMessageFormatter.getPreCalendarEmbed(CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()), settings), event));
			} else {
				MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.TimeZone.Specify", settings) + TIME_ZONE_DB, event);
			}
		}
	}

	private void moduleEdit(MessageCreateEvent event, CalendarData calendarData, GuildSettings settings) {
		if (!CalendarCreator.getCreator().hasPreCalendar(settings.getGuildID())) {
			if (!calendarData.getCalendarAddress().equalsIgnoreCase("primary")) {
				PreCalendar calendar = CalendarCreator.getCreator().edit(event, settings, true);
				if (calendar.getCreatorMessage() != null) {
					MessageManager.deleteMessage(event);
				} else {
					MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.Edit.Init", settings), CalendarMessageFormatter.getPreCalendarEmbed(calendar, settings), event);
				}
			} else {
				MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.NoCalendar", settings), event);
			}
		} else {
			if (CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()).getCreatorMessage() != null) {
				MessageManager.deleteMessage(event);
				MessageManager.deleteMessage(CalendarCreator.getCreator().getCreatorMessage(settings.getGuildID()));
				CalendarCreator.getCreator().setCreatorMessage(MessageManager.sendMessageSync(MessageManager.getMessage("Creator.Calendar.AlreadyInit", settings), CalendarMessageFormatter.getPreCalendarEmbed(CalendarCreator.getCreator().getPreCalendar(settings.getGuildID()), settings), event));
			} else {
				MessageManager.sendMessageAsync(MessageManager.getMessage("Creator.Calendar.AlreadyInit", settings), event);
			}
		}
	}
}