using Adaptation.PeerGroup.GCL.Annotations;
using System;
using System.Collections.Generic;

namespace Adaptation.Eaf.Core;

public class Backbone
{

#pragma warning disable CA1822
#pragma warning disable CA2254
#pragma warning disable IDE0060

    public const string STATE_ERROR = "Error";
    public const string STATE_OFFLINE = "Offline";
    public const string STATE_RUNNING = "Running";
    public const string STATE_SHUTDOWN = "Shutting Down";
    public const string STATE_STARTING = "Starting";

    protected Backbone() { }

    [NotNull]
    public static Backbone Instance { get; }
    [NotNull]
    public ILoggingSetupManager LoggingConfigurationManager { get; set; }
    public BackboneStatusCache Status { get; }
    public bool IsAutomatedRestartActive { get; }
    public bool IsReadyForRestart { get; }
    public string StartTime { get; }
    public string State { get; }
    public string Name { get; }
    public string ConfigurationServiceAddress { get; }
    public string CellName { get; }
    protected bool IsInitialized { get; set; }
    protected Dictionary<string, BackboneComponent> BackboneComponents { get; }

    public void AddBackboneComponent(BackboneComponent backboneComponent) { }
    public bool ContainsBackboneComponent(string id) => throw new NotImplementedException();
    [Obsolete("Use the capabilities exposed via the Status property -> GetAll. Will be removed with next major release.")]
    public List<StatusItem> GetAllStatuses() => throw new NotImplementedException();
    public BackboneComponent GetBackboneComponentById(string id) => throw new NotImplementedException();
    public List<T> GetBackboneComponentsOfType<T>() => throw new NotImplementedException();
    public List<BackboneComponent> GetBackboneComponentsOfType(Type type) => throw new NotImplementedException();
    public void RegisterSubprocess(int pid) { }
    [Obsolete("Use the capabilities exposed via the Status property -> SetValue. Will be removed with next major release.")]
    public void SetStatus(string statusName, string statusValue) { }
    [Obsolete("Use the capabilities exposed via the Status property -> SetValue. Will be removed with next major release.")]
    public void SetStatus(BackboneComponent source, string statusName, string statusValue) { }
    protected void CloseConnectionOfComponents(List<BackboneComponent> components) { }
    protected virtual void StopAllComponents() { }
    protected void StopComponents(List<BackboneComponent> components) { }

}