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

namespace Bp.Sync.Domain.Entities.Inventories.Orders
{
    public class Order : BaseEntityWithKey<long>
    {
        /// <summary>
        /// Mã đặt đơn
        /// </summary>
        [Column(TypeName = "nvarchar(64)")]
        public string Code { get; set; }
        /// <summary>
        /// Mã khách hàng
        /// </summary>
        public int CustomerId { get; set; }
        /// <summary>
        /// Mã chi nhánh hiện tại
        /// </summary>
        public int BranchId { get; set; }
        /// <summary>
        /// Mã chi nhánh đích (chi nhánh được đặt đơn hàng)
        /// VD: chi nhánh A đặt hàng của chi nhánh B. DestBranchId là ID của chi nhánh B
        /// </summary>
        public int DestBranchId { get; set; }
        /// <summary>
        /// Trạng thái đặt đơn
        /// </summary>
        public OrderStatus OrderStatus { get; set; } = OrderStatus.Ordering;
        /// <summary>
        /// Mô tả / lý do / diễn giải
        /// </summary>
        [Column(TypeName = "nvarchar(1024)")]
        public string Description { get; set; }
        /// <summary>
        /// Loại đơn hàng
        /// </summary>
        public OrderType OrderType { get; set; }
        /// <summary>
        /// Có in hóa đơn hay không?
        /// </summary>
        public bool IsPrintVatInvoice { get; set; }
        /// <summary>
        /// Ngày đặt hàng
        /// </summary>
        public DateTimeOffset? OrderDate { get; set; }
        /// <summary>
        /// Ngày duyệt đơn hàng
        /// </summary>
        public DateTimeOffset? ApprovedDate { get; set; }
        /// <summary>
        /// ID của người duyệt đơn hàng
        /// </summary>
        public int? ApprovedById { get; set; }
        /// <summary>
        /// Tên đăng nhập của người duyệt đơn hàng
        /// </summary>
        [Column(TypeName = "nvarchar(64)")]
        public string ApprovedByUserName { get; set; }
        /// <summary>
        /// Ngày xuất lần đầu tiên
        /// </summary>
        public DateTimeOffset? FirstExportedDate { get; set; }
        /// Mã đơn gộp 
        /// </summary>
        [Column(TypeName = "nvarchar(max)")]
        public string CombineCode { get; set; }
        /// <summary>
        /// Thời gian SLA
        /// </summary>
        public DateTimeOffset? SlaTime { get; set; }
    }

    public enum OrderStatus
    {
        [Description("Đang đặt hàng")]
        Ordering = 1,
        [Description("Chờ duyệt đơn")]
        Pending = 2,
        [Description("Chờ xuất kho")]
        Processing = 3,
        [Description("Đang xuất kho")]
        Exporting = 4,
        [Description("Hoàn thành")]
        Done = 5
    }

    public enum OrderType
    {
        [Description("Bán lẻ")]
        Retail = 1,
        [Description("Bán buôn")]
        Wholesale = 2

    }
}
