using PARR.Domain.Enums;
using PARR.EsppApi.Settings;
using System.Globalization;
using System.Text.Json.Serialization;

namespace PARR.EsppApi.Models
{
    /// <summary>
    /// Модель наряда из еспп
    /// </summary>
    public class EsppOrder
    {
        [JsonPropertyName("recordid")]
        public string Number { get; set; } = string.Empty;

        [JsonPropertyName("assignment")]
        public string? WorkGroup { get; set; }

        /// <summary>
        /// Статус наряда в формате строки
        /// </summary>
        [JsonPropertyName("status")]
        public string Status { get; set; } = string.Empty;

        [JsonPropertyName("title")]
        public string ShortName { get; set; } = string.Empty;

        [JsonPropertyName("templateName")]
        public string TemplateName { get; set; } = string.Empty;

        [JsonPropertyName("expirationDate")]
        public string ExpirationDate { get; set; } = string.Empty;

        public DateTimeOffset ExpirationDateUTC
        {
            get
            {
                    var dateTime = DateTime.ParseExact(ExpirationDate, "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture);
                    var utc = dateTime.AddHours(-EsppUserTimeZoneSettings.TimeZone);

                    //TODO: костыль!!! 
                    // странное поведение даты, разница с еспп 13 часов. 
                    // считаем часовой пояс УЗ ЕСПП 10 часов ЮТС
                    // в качестве костыля прибавляем 3 
                    utc = dateTime.AddHours(-3);

                    return new DateTimeOffset(utc, new TimeSpan(0));
            }
        }

        /// <summary>
        /// Статус наряда в формате OrderStatusEnum
        /// </summary>
        public OrderStatusEnum StatusEnum
        {
            get
            {
                switch (Status.Trim())
                {
                    case "1-Направлен в группу":
                        return OrderStatusEnum.New;
                    case "2-В работе":
                        return OrderStatusEnum.InWork;
                    case "3-Приостановлен":
                        return OrderStatusEnum.Stop;
                    case "4-Выполнен":
                        return OrderStatusEnum.Complete;
                    case "5-Закрыт":
                        return OrderStatusEnum.Closed;
                    default:
                        return OrderStatusEnum.New;
                }
            }
        }
    }
}