using Lada.Framework.Data.Domains.BaseEntities;
using Lada.Framework.Data.Domains.Crm;
using Lada.Framework.Data.Domains.Finance.Wallets;
using System.ComponentModel.DataAnnotations;

namespace Lada.Framework.Data.Domains.Orders
{
    public class Order : BaseEntityWithKey<int>
    {
        public Order()
        {
            
        }

        /// <summary>
        /// Mã hệ thống
        /// </summary>
        [MaxLength(128)]
        public string Code { get; set; }

        /// <summary>
        /// Mã đối tác
        /// </summary>
        [MaxLength(256)]
        public string PartnerCode { get; set; }

       
        [MaxLength(1024)]
        public string Note { get; set; }

        #region Đồng bộ elastic
        public DateTimeOffset? SyncedTime { get; set; }
        #endregion

        #region Khách hàng
        /// <summary>
        /// Đơn hàng của khách hàng nào
        /// </summary>
        public int CustomerId { get; set; }
        public virtual Customer Customer { get; set; }
        #endregion

        #region Sale
        /// <summary>
        /// Đơn hàng của sale nào
        /// </summary>
        public int SaleId { get; set; }

        /// <summary>
        /// Đơn hàng sale của Agency nào
        /// </summary>
        public int SaleAgencyId { get; set; }
        #endregion


        #region Relationship
        /// <summary>
        /// Danh sách địa chỉ
        /// </summary>
        public virtual IEnumerable<OrderAddress>? Addresses { get; set; }

        /// <summary>
        /// Nội dung hàng hóa trên đơn
        /// </summary>
        public virtual IEnumerable<OrderPackage>? Packages { get; set; }

        /// <summary>
        /// Danh sách tracking
        /// </summary>
        public virtual IEnumerable<OrderTrack>? Tracks { get; set; }

        public virtual OrderFin OrderFin { get; set; }
        public virtual OrderOps OrderOps { get; set; }
        public virtual OrderTimeTrack OrderTimeTrack { get; set; }

        public ICollection<TransactionOrder> TransactionOrders { get; set; } = new List<TransactionOrder>();

        #endregion
    }
}
