using System;
using System.Linq;
using System.Collections.Generic;
using ClassicUO.LegionScripting;

#pragma warning disable CS0169 // Field is never used

namespace ClassicUO.LegionScripting;


public abstract class EventSinkApiDeclaration
{
    /// <summary>
    /// Invoked when an item is added to the client.
    /// The event's argument is the ApiItem.
    /// </summary>
    public abstract void OnItemCreated(object callback);

    /// <summary>
    /// Invoked when an item is already in the client but has been updated.
    /// The event's argument is the ApiItem.
    /// </summary>
    public abstract void OnItemUpdated(object callback);

    /// <summary>
    /// Invoked when a corpse is added to the client. The event's 'sender' is the corpse Item
    /// </summary>
    public abstract void OnCorpseCreated(object callback);

    /// <summary>
    /// Invoked when the player is connected to a server
    /// </summary>
    public abstract void OnConnected(object callback);

    /// <summary>
    /// Invoked when the player is disconnected from the server
    /// </summary>
    public abstract void OnDisconnected(object callback);

    /// <summary>
    /// Invoked when any message is received from the server after client processing
    /// </summary>
    public abstract void MessageReceived(object callback);

    /// <summary>
    /// Invoked when any message is received from the server *before* client processing
    /// </summary>
    public abstract void RawMessageReceived(object callback);

    /// <summary>
    ///  Not currently used. May be removed later or put into use, not sure right now
    /// </summary>
    public abstract void ClilocMessageReceived(object callback);

    /// <summary>
    ///  Invoked when a message is added to the journal
    /// </summary>
    public abstract void JournalEntryAdded(object callback);

    /// <summary>
    /// Invoked when the server requests that a sound be played
    /// </summary>
    public abstract void SoundPlayed(object callback);

    /// <summary>
    /// Invoked when an object's property list data (Tooltip text for items) is received
    /// </summary>
    public abstract void OPLOnReceive(object callback);

    /// <summary>
    /// Invoked when a buff is "added" to a player.
    /// The event's argument is the ApiBuff.
    /// </summary>
    public abstract void OnBuffAdded(object callback);

    /// <summary>
    /// Invoked when a buff is "removed" to a player (Called before removal)
    /// The event's argument is the ApiBuff.
    /// </summary>
    public abstract void OnBuffRemoved(object callback);

    /// <summary>
    /// Invoked when the player's position is changed
    /// </summary>
    public abstract void OnPositionChanged(object callback);

    /// <summary>
    /// Invoked when any entity in the game receives damage, not necessarily the player.
    /// </summary>
    public abstract void OnEntityDamage(object callback);

    /// <summary>
    /// Invoked when a container is opened.
    /// The event's 'sender' is the Item, the event's argument is the item's serial
    /// </summary>
    public abstract void OnOpenContainer(object callback);

    /// <summary>
    /// Invoked when the player receives a death packet from the server
    /// </summary>
    public abstract void OnPlayerDeath(object callback);

    /// <summary>
    ///  Invoked when the player or server tells the client to path find
    ///  Vector is X, Y, Z, and Distance
    /// </summary>
    public abstract void OnPathFinding(object callback);

    /// <summary>
    /// Invoked when the server asks the client to generate some weather
    /// </summary>
    public abstract void OnSetWeather(object callback);

    /// <summary>
    /// Invoked after the player's hit points have changed.
    /// </summary>
    public abstract void OnPlayerHitsChanged(object callback);

    /// <summary>
    /// Invoked when a mobile is created.
    /// The event's sender is null and the argument is an ApiMobile.
    /// </summary>
    public abstract void ApiMobileCreated(object callback);

}


#pragma warning restore CS0169 // Field is never used