using Bp.Sync.Domain.Elastics.BaseEntities;
using Bp.Sync.Domain.Entities.Inventories.Products;
using System.ComponentModel.DataAnnotations.Schema;

namespace Bp.Sync.Domain.Elastics.Inventories.Products
{
    public class ProductElastic : ElasticBaseEntityWithKey<long>
    {
        /// <summary>
        /// Tên sản phẩm
        /// </summary>
        [Column(TypeName = "nvarchar(512)")]
        public string? Name { get; set; }

        /// <summary>
        /// Mã sản phẩm
        /// </summary>
        [Column(TypeName = "nvarchar(64)")]
        public string? Code { get; set; }

        /// <summary>
        /// Mã đối tác
        /// </summary>
        [Column(TypeName = "nvarchar(64)")]
        public string? PartnerCode { get; set; }

        /// <summary>
        /// Thành phần hoạt chất thuốc
        /// </summary>
        [Column(TypeName = "nvarchar(1024)")]
        public string? ActiveIngredient { get; set; }

        /// <summary>
        /// Hàm lượng thuốc
        /// </summary>
        [Column(TypeName = "nvarchar(1024)")]
        public string? Content { get; set; }

        /// <summary>
        /// Ghi chú sử dụng
        /// </summary>
        [Column(TypeName = "nvarchar(1024)")]
        public string? Note { get; set; }

        /// <summary>
        /// Quy cách đóng gói
        /// </summary>
        [Column(TypeName = "nvarchar(1024)")]
        public string? PackingSize { get; set; }

        /// <summary>
        /// Trạng thái sản phẩm
        /// </summary>
        public ProductStatus Status { get; set; }

        /// <summary>
        /// Số lượng cảnh báo hết hàng
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal QuantityWarning { get; set; }

        /// <summary>
        /// Số lượng dự trù
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal QuantityPlanning { get; set; }

        /// <summary>
        /// Dạng bào chế
        /// </summary>
        [Column(TypeName = "nvarchar(1024)")]
        public string? DosageForm { get; set; }

        /// <summary>
        /// Nhà sản xuất
        /// </summary>
        [Column(TypeName = "nvarchar(1024)")]
        public string? Manufacturer { get; set; }

        /// <summary>
        /// Nước sản xuất
        /// </summary>
        [Column(TypeName = "nvarchar(512)")]
        public string? CountryMade { get; set; }

        /// <summary>
        /// Nhà nhập khẩu
        /// </summary>
        [Column(TypeName = "nvarchar(512)")]
        public string? Importer { get; set; }

        /// <summary>
        /// Số đăng ký thuốc
        /// </summary>
        [Column(TypeName = "nvarchar(512)")]
        public string? ProductRegister { get; set; }

        /// <summary>
        /// Ghi chú của IT
        /// </summary>
        [Column(TypeName = "nvarchar(1024)")]
        public string? TechNote { get; set; }

        /// <summary>
        /// ID của nhà cung cấp
        /// </summary>
        public int SupplierId { get; set; }

        /// <summary>
        /// Mã nhóm hàng
        /// </summary>
        public int ProductGroupId { get; set; }

        /// <summary>
        /// Mã loại chức năng
        /// </summary>
        public int ProductTypeId { get; set; }

        /// <summary>
        /// Mã nhóm bệnh cấp độ 1
        /// </summary>
        public int DeseaseGroup1Id { get; set; }

        /// <summary>
        /// Mã nhóm bệnh cấp độ 2
        /// </summary>
        public int DeseaseGroup2Id { get; set; }

        /// <summary>
        /// Mã dạng sử dụng
        /// </summary>
        public int UsageFormId { get; set; }

        /// <summary>
        /// Tuổi thọ sản phẩm (theo đơn vị tháng)
        /// </summary>
        public int ShelfLife { get; set; }

        //thêm vào báo cáo
        /// <summary>
        /// Là sản phẩm độc quyền?
        /// </summary>
        public bool IsExclusiveProduct => ProductGroupId == 24882 ? true : false;

        /// <summary>
        /// Mã SKU
        /// </summary>
        [Column(TypeName = "nvarchar(64)")]
        public string Sku { get; set; }

        /// <summary>
        /// Là sản phẩm quảng cáo?
        /// </summary>
        public bool IsAdvertisingProduct { get; set; }

        public Entities.Inventories.Suppliers.SupplierType SupplierType { get; set; }
    }
}