using System.Threading;

namespace WingsEmu.Game.Managers;

public class StaticServerManager
{
    public static IServerManager Instance { get; private set; }

    public static void Initialize(IServerManager instance)
    {
        Instance = instance;
    }
}

public enum GameServerState
{
    ERROR,
    STARTING,
    RUNNING,
    IDLE,
    STOPPING
}

public interface IServerManager
{
    GameServerState State { get; }
    bool IsRunning { get; }
    int ChannelId { get; }
    int MobDropRate { get; }
    int MobDropChance { get; }
    int FamilyExpRate { get; }
    bool ExpEvent { get; set; }
    int FairyXpRate { get; set; }
    int GoldDropRate { get; set; }
    int GoldRate { get; set; }
    int GoldDropChance { get; set; }
    int GenericDropRate { get; set; }
    int GenericDropChance { get; set; }
    int ReputRate { get; set; }
    int HeroicStartLevel { get; set; }
    int HeroXpRate { get; set; }
    long MaxGold { get; set; }
    long MaxBankGold { get; set; }
    short MaxHeroLevel { get; set; }
    short MaxJobLevel { get; set; }
    short MaxLevel { get; set; }
    short MaxSpLevel { get; set; }
    int MateXpRate { get; set; }
    int PartnerXpRate { get; set; }
    short MaxMateLevel { get; set; }
    short MaxNpcTalkRange { get; set; }
    int MaxBasicSpPoints { get; set; }
    int MaxAdditionalSpPoints { get; set; }
    string ServerGroup { get; }
    int MobXpRate { get; set; }
    int AccountLimit { get; }
    bool InShutdown { get; }
    int JobXpRate { get; set; }
    void InitializeAsync();
    void ListenCancellation(CancellationTokenSource stopServiceTokenSource);
    void TryStart();
    void PutIdle();
    void Shutdown();
}