namespace Forwarder.Models;

/// <summary>
/// Модель объекта.
/// </summary>
public class GetObjectListResponse
{
	/// <summary>
	/// Страна, в которой находится объект
	/// </summary>
	public string Country { get; set; } = string.Empty;

	/// <summary>
	/// Ревизия объекта (может быть null)
	/// </summary>
	public object? Rev { get; set; } = null;

	/// <summary>
	/// Состояние объекта
	/// </summary>
	public ObjectState ObjectState { get; set; } = new();

	/// <summary>
	/// Флаг, указывающий, что объект из IDP
	/// </summary>
	public bool IsFromIdp { get; set; } = false;

	/// <summary>
	/// Список устройств объекта
	/// </summary>
	public List<Device> Devices { get; set; } = [];

	/// <summary>
	/// Город, в котором находится объект
	/// </summary>
	public string City { get; set; } = string.Empty;

	/// <summary>
	/// Флаг онлайн-статуса GSM
	/// </summary>
	public bool IsGsmOnline { get; set; } = false;

	/// <summary>
	/// Долгота местоположения объекта
	/// </summary>
	public double Lon { get; set; } = 0.0;

	/// <summary>
	/// Статус объекта
	/// </summary>
	public int ObjStatus { get; set; } = 0;

	/// <summary>
	/// Наименование объекта
	/// </summary>
	public string Name { get; set; } = string.Empty;

	/// <summary>
	/// IMEI устройства
	/// </summary>
	public string Imei { get; set; } = string.Empty;

	/// <summary>
	/// Краткий адрес объекта
	/// </summary>
	public string AddressShort { get; set; } = string.Empty;

	/// <summary>
	/// Идентификатор объекта
	/// </summary>
	public int Id { get; set; } = 0;

	/// <summary>
	/// Внешний идентификатор объекта
	/// </summary>
	public int ExtId { get; set; } = 0;

	/// <summary>
	/// Регион, в котором находится объект
	/// </summary>
	public string Region { get; set; } = string.Empty;

	/// <summary>
	/// Тип объекта
	/// </summary>
	public string ObjType { get; set; } = string.Empty;

	/// <summary>
	/// Широта местоположения объекта
	/// </summary>
	public double Lat { get; set; } = 0.0;

	/// <summary>
	/// Флаг онлайн-статуса
	/// </summary>
	public bool IsOnline => ObjectState.IsOnline == 1;
}

/// <summary>
/// Состояние объекта.
/// </summary>
public class ObjectState
{
	/// <summary>
	/// Флаг наличия неисправности (0 - нет, 1 - есть)
	/// </summary>
	public int HasFault { get; set; } = 0;

	/// <summary>
	/// Флаг онлайн-статуса (0 - оффлайн, 1 - онлайн)
	/// </summary>
	public int IsOnline { get; set; } = 0;

	/// <summary>
	/// Флаг охраны (0 - не охраняется, 1 - охраняется)
	/// </summary>
	public int IsGuarded { get; set; } = 0;

	/// <summary>
	/// Флаг тревоги (0 - нет тревоги, 1 - тревога)
	/// </summary>
	public int HasAlarm { get; set; } = 0;
}

/// <summary>
/// Устройство объекта.
/// </summary>
public class Device
{
	/// <summary>
	/// IMEI номер устройства
	/// </summary>
	public string Imei { get; set; } = string.Empty;
}