using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;

namespace Электронная_Фармация.Classes
{
    public class PriceSummaryItem
    {
        /// <summary>
        /// GUID препарата из справочника (обязательное поле)
        /// </summary>
        /// 
        [JsonPropertyName("supplier_price_id")]
        public string SupplierPriceID { get; set; }

        [JsonPropertyName("price_list_id")]
        public string PriceListId { get; set; }

        [JsonPropertyName("guid_es")]
        public string GuidEs { get; set; }

        /// <summary>
        /// ID поставщика (только при запросе для всех поставщиков)
        /// </summary>
        [JsonPropertyName("supplier_id")]
        public string SupplierId { get; set; }

        /// <summary>
        /// Название поставщика (только при запросе для всех поставщиков)
        /// </summary>
        [JsonPropertyName("supplier_name")]
        public string SupplierName { get; set; }

        /// <summary>
        /// Название препарата
        /// </summary>
        [JsonPropertyName("drug_name")]
        public string DrugName { get; set; }

        /// <summary>
        /// Международное непатентованное название (МНН)
        /// </summary>
        [JsonPropertyName("inn")]
        public string Inn { get; set; }

        /// <summary>
        /// Лекарственная форма
        /// </summary>
        [JsonPropertyName("cure_form")]
        public string CureForm { get; set; }

        /// <summary>
        /// Штрих-код
        /// </summary>
        [JsonPropertyName("barcode")]
        public string Barcode { get; set; }

        /// <summary>
        /// Базовая цена поставщика (без розничной наценки клиента).
        /// </summary>
        [JsonPropertyName("price")]
        public decimal? Price { get; set; }

        /// <summary>
        /// Процент наценки для позиции. Если не задан — используется markup_percent из ответа прайса.
        /// </summary>
        [JsonPropertyName("markup_percent")]
        public decimal? MarkupPercent { get; set; }

        /// <summary>
        /// Количество товара на складе
        /// </summary>
        [JsonPropertyName("quantity")]
        public decimal? Quantity { get; set; }

        /// <summary>
        /// ID региона
        /// </summary>
        [JsonPropertyName("region_id")]
        public string RegionId { get; set; }

        /// <summary>
        /// Название региона
        /// </summary>
        [JsonPropertyName("region_name")]
        public string RegionName { get; set; }

        /// <summary>
        /// Дата последнего обновления цены (ISO 8601)
        /// </summary>
        [JsonPropertyName("last_price_date")]
        public string LastPriceDate { get; set; }

        /// <summary>
        /// Метод сопоставления (BARCODE, NAME, MANUAL и т.д.)
        /// </summary>
        [JsonPropertyName("match_method")]
        public string MatchMethod { get; set; }

        /// <summary>
        /// Уверенность в сопоставлении (0.0 - 1.0)
        /// </summary>
        [JsonPropertyName("match_confidence")]
        public decimal? MatchConfidence { get; set; }

        /// <summary>
        /// Торговое название
        /// </summary>
        [JsonPropertyName("trade_name")]
        public string TradeName { get; set; }

        /// <summary>
        /// Дозировка
        /// </summary>
        [JsonPropertyName("dosage")]
        public string Dosage { get; set; }

        /// <summary>
        /// Цена из реестра
        /// </summary>
        [JsonPropertyName("registry_price")]
        public decimal? RegistryPrice { get; set; }

        /// <summary>
        /// GUID инструкции
        /// </summary>
        [JsonPropertyName("instruction_guid")]
        public string InstructionGuid { get; set; }

        /// <summary>
        /// Описание препарата
        /// </summary>
        [JsonPropertyName("description")]
        public string Description { get; set; }

        /// <summary>
        /// Условия хранения
        /// </summary>
        [JsonPropertyName("storing_condition")]
        public string StoringCondition { get; set; }

        /// <summary>
        /// Срок годности
        /// </summary>
        [JsonPropertyName("expiry_period")]
        public string ExpiryPeriod { get; set; }

        /// <summary>
        /// Название производителя
        /// </summary>
        [JsonPropertyName("producer_name")]
        public string ProducerName { get; set; }

        /// <summary>
        /// Дата регистрации (ISO 8601)
        /// </summary>
        [JsonPropertyName("registry_date")]
        public string RegistryDate { get; set; }

        /// <summary>
        /// Код из справочника ES
        /// </summary>
        [JsonPropertyName("es_code")]
        public long? EsCode { get; set; }

        /// <summary>
        /// Статус регистрации
        /// </summary>
        [JsonPropertyName("registry_status")]
        public string RegistryStatus { get; set; }

        /// <summary>
        /// Получает дату последнего обновления цены как DateTime
        /// </summary>
        public DateTime? GetLastPriceDateTime()
        {
            if (string.IsNullOrEmpty(LastPriceDate))
                return null;

            if (DateTime.TryParse(LastPriceDate, out var date))
                return date;

            return null;
        }

        /// <summary>
        /// Получает дату регистрации как DateTime
        /// </summary>
        public DateTime? GetRegistryDateTime()
        {
            if (string.IsNullOrEmpty(RegistryDate))
                return null;

            if (DateTime.TryParse(RegistryDate, out var date))
                return date;

            return null;
        }

        public string Zakaz { get; set; }
        public string SummaZakaza { get; set; }
    }
}
