using Model.Doc; using Model.BuildOrders; using Model.Economy; using Model.Entity; using Model.MemoryTester; using Model.Notes; using Model.Website; using Model.Website.Enums; using Model.Git; using Model.Feedback; using Model.Work.Tasks; using Services.Immortal; namespace Services; public interface IToastService { public void Subscribe(Action action); public void Unsubscribe(Action action); void AddToast(ToastModel toast); void RemoveToast(ToastModel toast); bool HasToasts(); List GetToasts(); void AgeToasts(); void ClearAllToasts(); } public interface IEntityDialogService { public void Subscribe(Action action); public void Unsubscribe(Action action); public void AddDialog(string entityId); public void CloseDialog(); public void BackDialog(); public string? GetEntityId(); public bool HasDialog(); public bool HasHistory(); } public interface IWebsiteService { public List WebPageModels { get; set; } public List WebSectionModels { get; set; } public void Subscribe(Action action); public void Unsubscribe(Action action); public void Update(); public Task Load(); public bool IsLoaded(); } public interface IAgileService { #if NO_SQL public List? AgileSprintModels { get; set; } public List? AgileTaskModels { get; set; } #else public DbSet SprintModels { get; } public DbSet TaskModels { get; } #endif public void Subscribe(Action? action); public void Unsubscribe(Action? action); public void Update(); public Task Load(); public bool IsLoaded(); } public interface INoteService { public List NoteContentModels { get; set; } public List NoteConnectionModels { get; set; } public List NoteSectionModels { get; set; } public void Subscribe(Action action); public void Unsubscribe(Action action); public void Update(); public Task Load(); public bool IsLoaded(); } public interface IDocumentationService { public List DocContentModels { get; set; } public List DocConnectionModels { get; set; } public List DocContentModelsByPageOrder { get; set; } public List DocSectionModels { get; set; } public void Subscribe(Action? action); public void Unsubscribe(Action? action); public void Update(); public Task Load(); public bool IsLoaded(); } public interface IGitService { #if NO_SQL public List GitChangeModels { get; set; } public List GitPatchModels { get; set; } #else public DbSet ChangeModels { get; } public DbSet PatchModels { get; } #endif public void Subscribe(Action action); public void Unsubscribe(Action action); public void Update(); #if NO_SQL public Task Load(); #else public Task Load(DatabaseContext database); #endif public bool IsLoaded(); } public interface INavigationService { public void Subscribe(Action action); public void Unsubscribe(Action action); public void ChangeNavigationSectionId(int newState); public int GetNavigationSectionId(); public void ChangeNavigationState(string newState); public string GetNavigationState(); public void Back(); public void SelectSection(int webSectionType); public void SelectPage(int pageType, Type webPageType); public NavSelectionType GetNavSelectionType(); public int GetWebPageId(); public int GetWebSectionId(); public Type GetRenderType(); } public interface IBuildComparisonService { public void SetBuilds(BuildComparisonModel buildComparisonModel); public BuildComparisonModel Get(); public string BuildOrderAsYaml(); public string AsJson(); public bool LoadJson(string data); public void Subscribe(Action action); public void Unsubscribe(Action action); } public interface ITimingService { public int GetTiming(); public void SetTiming(int timing); public void Subscribe(Action? action); public void Unsubscribe(Action? action); } public interface IEconomyService { public List GetOverTime(); public EconomyModel GetEconomy(int atInterval); public void Calculate(IBuildOrderService buildOrder, ITimingService timing, int fromInterval); public void Subscribe(Action action); public void Unsubscribe(Action action); } public interface IEntityFilterService { public delegate void EntityFilterAction(EntityFilterEvent entityFilterEvent); public string GetFactionType(); public string GetImmortalType(); public string GetEntityType(); public string GetSearchText(); public List GetFactionChoices(); public List GetImmortalChoices(); public List GetEntityChoices(); public bool SelectFactionType(string factionType); public bool SelectImmortalType(string immortalType); public bool SelectEntityType(string entityType); public bool EnterSearchText(string searchText); public void Subscribe(EntityFilterAction action); public void Unsubscribe(EntityFilterAction action); } public interface IEntityService { public List GetEntities(); } public interface IEntityDisplayService { public List DefaultChoices(); public string GetDisplayType(); public void SetDisplayType(string displayType); public void Subscribe(Action action); public void Unsubscribe(Action action); } public interface IImmortalSelectionService { public string GetFactionType(); public string GetImmortalType(); public bool SelectFactionType(string factionType); public bool SelectImmortalType(string immortalType); public void Subscribe(Action action); public void Unsubscribe(Action action); } public interface IKeyService { public List GetAllPressedKeys(); public string? GetHotkey(); public string GetHotkeyGroup(); public bool IsHoldingSpace(); public bool AddPressedKey(string key); public bool RemovePressedKey(string key); public void Subscribe(Action? action); public void Unsubscribe(Action? action); } public interface IMemoryTesterService { public delegate void MemoryAction(MemoryTesterEvent memoryEvent); public List GetEntities(); public List GetQuestions(); void GenerateQuiz(); public void Update(MemoryQuestionModel question); public void Verify(); public void Subscribe(MemoryAction memoryAction); public void Unsubscribe(MemoryAction memoryAction); } public interface IBuildOrderService { public Dictionary> StartedOrders { get; } public Dictionary> CompletedOrders { get; } public Dictionary UniqueCompletedTimes { get; } public Dictionary SupplyCountTimes { get; } public bool Add(EntityModel entity, IEconomyService withEconomy, IToastService toastService); public void Add(EntityModel entity, int atInterval); public void SetName(string Name); public string GetName(); public void SetNotes(string Notes); public string GetNotes(); public void SetColor(string Color); public string GetColor(); public int? WillMeetRequirements(EntityModel entity); public int? WillMeetSupply(EntityModel entity); public Dictionary> GetOrders(); public List GetCompletedBefore(int interval); public List GetHarvestersCompletedBefore(int interval); public void RemoveLast(); public int GetLastRequestInterval(); public string BuildOrderAsYaml(); public string AsJson(); public void Subscribe(Action action); public void Unsubscribe(Action action); }