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

package com.hypixel.hytale.server.core.util;

import com.hypixel.hytale.protocol.Packet;
import com.hypixel.hytale.protocol.packets.interface_.Notification;
import java.util.Objects;
import com.hypixel.hytale.server.core.io.PacketHandler;
import com.hypixel.hytale.server.core.universe.PlayerRef;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.component.Store;
import java.util.Iterator;
import com.hypixel.hytale.server.core.universe.world.World;
import com.hypixel.hytale.server.core.universe.Universe;
import com.hypixel.hytale.protocol.packets.interface_.NotificationStyle;
import com.hypixel.hytale.protocol.ItemWithAllMetadata;
import javax.annotation.Nullable;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.core.Message;

public class NotificationUtil
{
    public static void sendNotificationToUniverse(@Nonnull final Message message, @Nullable final Message secondaryMessage, @Nullable final String icon, @Nullable final ItemWithAllMetadata item, @Nonnull final NotificationStyle style) {
        for (final World world : Universe.get().getWorlds().values()) {
            world.execute(() -> {
                final Store<EntityStore> store = world.getEntityStore().getStore();
                sendNotificationToWorld(message, secondaryMessage, icon, item, style, store);
            });
        }
    }
    
    public static void sendNotificationToUniverse(@Nonnull final String message) {
        sendNotificationToUniverse(Message.raw(message), null, null, null, NotificationStyle.Default);
    }
    
    public static void sendNotificationToUniverse(@Nonnull final String message, @Nonnull final String secondaryMessage) {
        sendNotificationToUniverse(Message.raw(message), Message.raw(secondaryMessage), null, null, NotificationStyle.Default);
    }
    
    public static void sendNotificationToUniverse(@Nonnull final String message, @Nonnull final NotificationStyle style) {
        sendNotificationToUniverse(Message.raw(message), null, null, null, style);
    }
    
    public static void sendNotificationToUniverse(@Nonnull final Message message) {
        sendNotificationToUniverse(message, null, null, null, NotificationStyle.Default);
    }
    
    public static void sendNotificationToUniverse(@Nonnull final Message message, @Nonnull final NotificationStyle style) {
        sendNotificationToUniverse(message, null, null, null, style);
    }
    
    public static void sendNotificationToUniverse(@Nonnull final Message message, @Nullable final String icon, @Nonnull final NotificationStyle style) {
        sendNotificationToUniverse(message, null, icon, null, style);
    }
    
    public static void sendNotificationToUniverse(@Nonnull final Message message, @Nullable final ItemWithAllMetadata item, @Nonnull final NotificationStyle style) {
        sendNotificationToUniverse(message, null, null, item, style);
    }
    
    public static void sendNotificationToUniverse(@Nonnull final Message message, @Nullable final Message secondaryMessage, @Nullable final String icon) {
        sendNotificationToUniverse(message, secondaryMessage, icon, null, NotificationStyle.Default);
    }
    
    public static void sendNotificationToUniverse(@Nonnull final Message message, @Nullable final Message secondaryMessage, @Nullable final ItemWithAllMetadata item) {
        sendNotificationToUniverse(message, secondaryMessage, null, item, NotificationStyle.Default);
    }
    
    public static void sendNotificationToUniverse(@Nonnull final Message message, @Nullable final Message secondaryMessage, @Nonnull final NotificationStyle style) {
        sendNotificationToUniverse(message, secondaryMessage, null, null, style);
    }
    
    public static void sendNotificationToUniverse(@Nonnull final Message message, @Nullable final Message secondaryMessage, @Nullable final String icon, @Nonnull final NotificationStyle style) {
        sendNotificationToUniverse(message, secondaryMessage, icon, null, style);
    }
    
    public static void sendNotificationToUniverse(@Nonnull final Message message, @Nullable final Message secondaryMessage, @Nullable final ItemWithAllMetadata item, @Nonnull final NotificationStyle style) {
        sendNotificationToUniverse(message, secondaryMessage, null, item, style);
    }
    
    public static void sendNotificationToWorld(@Nonnull final Message message, @Nullable final Message secondaryMessage, @Nullable final String icon, @Nullable final ItemWithAllMetadata item, @Nonnull final NotificationStyle style, @Nonnull final Store<EntityStore> store) {
        final World world = store.getExternalData().getWorld();
        for (final PlayerRef playerRefComponent : world.getPlayerRefs()) {
            sendNotification(playerRefComponent.getPacketHandler(), message, secondaryMessage, icon, item, style);
        }
    }
    
    public static void sendNotification(@Nonnull final PacketHandler handler, @Nonnull final Message message, @Nullable final Message secondaryMessage, @Nullable final String icon, @Nullable final ItemWithAllMetadata item, @Nonnull final NotificationStyle style) {
        Objects.requireNonNull(message, "Notification message can't be null!");
        Objects.requireNonNull(style, "Notification style can't be null!");
        handler.writeNoCache(new Notification(message.getFormattedMessage(), (secondaryMessage != null) ? secondaryMessage.getFormattedMessage() : null, icon, item, style));
    }
    
    public static void sendNotification(@Nonnull final PacketHandler handler, @Nonnull final String message) {
        sendNotification(handler, Message.raw(message), null, null, null, NotificationStyle.Default);
    }
    
    public static void sendNotification(@Nonnull final PacketHandler handler, @Nonnull final Message message, @Nonnull final String icon) {
        sendNotification(handler, message, null, icon, null, NotificationStyle.Default);
    }
    
    public static void sendNotification(@Nonnull final PacketHandler handler, @Nonnull final Message message, @Nonnull final String icon, @Nonnull final NotificationStyle notificationStyle) {
        sendNotification(handler, message, null, icon, null, notificationStyle);
    }
    
    public static void sendNotification(@Nonnull final PacketHandler handler, @Nonnull final String message, @Nonnull final NotificationStyle style) {
        sendNotification(handler, Message.raw(message), null, null, null, style);
    }
    
    public static void sendNotification(@Nonnull final PacketHandler handler, @Nonnull final Message message) {
        sendNotification(handler, message, null, null, null, NotificationStyle.Default);
    }
    
    public static void sendNotification(@Nonnull final PacketHandler handler, final Message message, final NotificationStyle style) {
        sendNotification(handler, message, null, null, null, style);
    }
    
    public static void sendNotification(@Nonnull final PacketHandler handler, @Nonnull final String message, @Nonnull final String secondaryMessage) {
        sendNotification(handler, Message.raw(message), Message.raw(secondaryMessage), null, null, NotificationStyle.Default);
    }
    
    public static void sendNotification(@Nonnull final PacketHandler handler, final Message message, final Message secondaryMessage, final String icon) {
        sendNotification(handler, message, secondaryMessage, icon, null, NotificationStyle.Default);
    }
    
    public static void sendNotification(@Nonnull final PacketHandler handler, final Message message, final Message secondaryMessage) {
        sendNotification(handler, message, secondaryMessage, null, null, NotificationStyle.Default);
    }
    
    public static void sendNotification(@Nonnull final PacketHandler handler, final Message message, final Message secondaryMessage, final ItemWithAllMetadata item) {
        sendNotification(handler, message, secondaryMessage, null, item, NotificationStyle.Default);
    }
    
    public static void sendNotification(@Nonnull final PacketHandler handler, final Message message, final Message secondaryMessage, @Nonnull final NotificationStyle style) {
        sendNotification(handler, message, secondaryMessage, null, null, style);
    }
    
    public static void sendNotification(@Nonnull final PacketHandler handler, final Message message, final Message secondaryMessage, final String icon, @Nonnull final NotificationStyle style) {
        sendNotification(handler, message, secondaryMessage, icon, null, style);
    }
    
    public static void sendNotification(@Nonnull final PacketHandler handler, final Message message, final Message secondaryMessage, final ItemWithAllMetadata item, @Nonnull final NotificationStyle style) {
        sendNotification(handler, message, secondaryMessage, null, item, style);
    }
}
