using Hcs.Broker.Api;
using Hcs.Broker.Logger;
using Hcs.Broker.MessageCapturer;

namespace Hcs.Broker
{
    /// <summary>
    /// Клиент для вызова всех реализованных функций интеграции с ГИС ЖКХ
    /// </summary>
    public interface IClient
    {
        /// <summary>
        /// Идентификатор поставщика данных ГИС ЖКХ
        /// </summary>
        string OrgPPAGUID { get; set; }

        /// <summary>
        /// Исполнитель/сотрудник ГИС ЖКХ, от которого будут регистрироваться ответы
        /// </summary>
        string ExecutorGUID { get; set; }

        /// <summary>
        /// Признак, указывающий на то, что используется ли внешний туннель (stunnel)
        /// </summary>
        bool UseTunnel { get; set; }

        /// <summary>
        /// Если true, то запросы будут выполняться на промышленном стенде, иначе - на тестовом
        /// </summary>
        bool IsPPAK { get; set; }

        /// <summary>
        /// Роль
        /// </summary>
        OrganizationRole Role { get; set; }

        /// <summary>
        /// Устанавливаемый пользователем приемник отладочных сообщений
        /// </summary>
        ILogger Logger { get; set; }

        /// <summary>
        /// Устанавливаемый пользователем механизм перехвата содержимого отправляемых 
        /// и принимаемых пакетов
        /// </summary>
        IMessageCapturer MessageCapturer { get; set; }

        IBillsApi Bills { get; }

        IDeviceMeteringApi DeviceMetering { get; }

        IHouseManagementApi HouseManagement { get; }

        INsiApi Nsi { get; }

        INsiCommonApi NsiCommon { get; }

        IOrgRegistryCommonApi OrgRegistryCommon { get; }

        IPaymentsApi Payments { get; }

        void SetSigningCertificate(string serialNumber, string? pin = null);
    }
}
