using Hcs.Broker.Api.Registry;

namespace Hcs.Broker.Api.Payload.DeviceMetering
{
    // http://open-gkh.ru/DeviceMetering/exportMeteringDeviceHistoryRequest.html
    public class ExportMeteringDeviceHistoryPayload
    {
        /// <summary>
        /// Необязательное. Список из уникальных идентификаторов домов по ФИАС, в которых установлены ПУ
        /// пользователей. Если не указано, то будут экспортироваться данные по всем ПУ пользователей.
        /// </summary>
        public string[] fiasHouseGuid;

        /// <summary>
        /// Выборочное. Выбор между <see cref="meteringDeviceType"/>, <see cref="municipalResource"/> и
        /// <see cref="meteringDeviceRootGUID"/>. Тип прибора учета (НСИ 27). Максимум 100 по выбранным.
        /// </summary>
        public RegistryElement[] meteringDeviceType;

        /// <summary>
        /// Выборочное. Выбор между <see cref="meteringDeviceType"/>, <see cref="municipalResource"/> и
        /// <see cref="meteringDeviceRootGUID"/>. Вид коммунального ресурса (НСИ 2). Максимум 100 по выбранным.
        /// </summary>
        public RegistryElement[] municipalResource;

        /// <summary>
        /// Выборочное. Выбор между <see cref="meteringDeviceType"/>, <see cref="municipalResource"/> и
        /// <see cref="meteringDeviceRootGUID"/>. Идентификатор ПУ. Максимум 100 по выбранным.
        /// </summary>
        public string[] meteringDeviceRootGUID;

        /// <summary>
        /// Необязательное. Дата ввода в эксплуатацию "С".
        /// </summary>
        public DateTime? commissioningDateFrom;

        /// <summary>
        /// Необязательное. Дата ввода в эксплуатацию "П".
        /// </summary>
        public DateTime? сommissioningDateTo;

        /// <summary>
        /// Необязательное. Выгружать архивированные или нет.
        /// </summary>
        public bool? serchArchived;

        /// <summary>
        /// Необязательное. Дата архивации "С".
        /// </summary>
        public DateTime? archiveDateFrom;

        /// <summary>
        /// Необязательное. Дата архивации "По".
        /// </summary>
        public DateTime? archiveDateTo;

        /// <summary>
        /// Необязательное. Дата начала периода, за который выгружаются показания и поверки ПУ (по дате
        /// снятия показаний). Период выгрузки показаний ПУ (определяемый элементами <see cref="inputDateFrom"/>
        /// и <see cref="inputDateTo"/>) не должен выходить за пределы двух последовательных календарных месяцев.
        /// </summary>
        public DateTime? inputDateFrom;

        /// <summary>
        /// Необязательное. Дата окончания периода, за который выгружаются показания и поверки ПУ (по дате
        /// снятия показаний). Период выгрузки показаний ПУ (определяемый элементами <see cref="inputDateFrom"/>
        /// и <see cref="inputDateTo"/>) не должен выходить за пределы двух последовательных календарных месяцев.
        /// </summary>
        public DateTime? inputDateTo;

        /// <summary>
        /// Необязательное. Если флаг сброшен или отсутствует, то показания, введенные в систему гражданином,
        /// включаются в выгрузку. Если флаг установлен, то такие показания в выгрузку не включаются.
        /// </summary>
        public bool? excludePersonAsDataSource;

        /// <summary>
        /// Необязательное. Если флаг сброшен или отсутствует, то показания, введенные в систему текущей
        /// организацией, включаются в выгрузку. Если флаг установлен, то такие показания в выгрузку не включаются.
        /// </summary>
        public bool? excludeCurrentOrgAsDataSource;

        /// <summary>
        /// Необязательное. Если флаг сброшен или отсутствует, то показания, введенные в систему организациями
        /// отличной от текущей, включаются в выгрузку. Если флаг установлен, то такие показания в выгрузку
        /// не включаются.
        /// </summary>
        public bool? excludeOtherOrgAsDataSource;
    }
}
