using Lada.Framework.Data.Enums;
using Lada.Framework.Infrastructures.Helpers;

namespace Ladaer.BackEnd.Infrastructures.DTO.Models.Orders.Detail
{
    /// <summary>
    /// Đối tượng đại diện cho thông tin chung của đơn hàng.
    /// </summary>
    public class OrderDetailGeneralModel
    {
        /// <summary>
        /// Mã đơn hàng.
        /// </summary>
        public required string Code { get; set; }

        /// <summary>
        /// Trạng thái đơn hàng.
        /// </summary>
        public OrderStatus Status { get; set; }

        /// <summary>
        /// Chuỗi mô tả trạng thái đơn hàng.
        /// </summary>
        public string StatusStr => Status.GetDescription();

        /// <summary>
        /// Trạng thái vật lý của đơn hàng.
        /// </summary>
        public OrderPhysicalStatus PhysicalStatus { get; set; }

        /// <summary>
        /// Chuỗi mô tả trạng thái vật lý của đơn hàng.
        /// </summary>
        public string PhysicalStatusStr => PhysicalStatus.GetDescription();

        /// <summary>
        /// Nội dung trạng thái đơn hàng.
        /// </summary>
        public required string StatusContent { get; set; }

        /// <summary>
        /// Tên tuyến đường.
        /// </summary>
        public required string RouteName { get; set; }

        #region Khách hàng
        /// <summary>
        /// Tên khách hàng.
        /// </summary>
        public required string CustomerName { get; set; }

        /// <summary>
        /// Tên đăng nhập của khách hàng.
        /// </summary>
        public required string CustomerUserName { get; set; }

        /// <summary>
        /// Id của khách hàng.
        /// </summary>
        public int CustomerId { get; set; }
        #endregion

        #region PIC - người phụ trách hiện tại
        /// <summary>
        /// Id của người phụ trách hiện tại.
        /// </summary>
        public int PicId { get; set; }

        /// <summary>
        /// Tên người phụ trách hiện tại.
        /// </summary>
        public required string PicUserName { get; set; }
        #endregion

        /// <summary>
        /// Ngày tạo.
        /// </summary>
        public DateTimeOffset? CreatedTime { get; set; }

        /// <summary>
        /// Chuỗi hiển thị ngày tạo.
        /// </summary>
        public string CreatedTimeDisplay => CreatedTime.HasValue ? CreatedTime.Value.ToString("dd/MM/yyyy HH:mm") : "";

        /// <summary>
        /// Ngày cập nhật.
        /// </summary>
        public DateTimeOffset? UpdatedTime { get; set; }

        /// <summary>
        /// Chuỗi hiển thị ngày cập nhật.
        /// </summary>
        public string UpdatedTimeDisplay => UpdatedTime.HasValue ? UpdatedTime.Value.ToString("dd/MM/yyyy HH:mm") : "";
    }
}
