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 địa chỉ chi tiết của đơn hàng.
    /// </summary>
    public class OrderDetailAddressModel
    {
        /// <summary>
        /// Id của địa chỉ.
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// Id của đơn hàng.
        /// </summary>
        public int OrderId { get; set; }

        /// <summary>
        /// Tên người liên hệ.
        /// </summary>
        public required string Name { get; set; }

        /// <summary>
        /// Số điện thoại chính.
        /// </summary>
        public required string PhoneNumber1 { get; set; }

        /// <summary>
        /// Số điện thoại phụ.
        /// </summary>
        public required string PhoneNumber2 { get; set; }

        /// <summary>
        /// Địa chỉ chính.
        /// </summary>
        public required string Address1 { get; set; }

        /// <summary>
        /// Địa chỉ phụ.
        /// </summary>
        public required string Address2 { get; set; }

        /// <summary>
        /// Loại địa chỉ.
        /// </summary>
        public AddressType AddressType { get; set; }

        /// <summary>
        /// Chuỗi mô tả loại địa chỉ.
        /// </summary>
        public string AddressTypeStr => AddressType.GetDescription();

        /// <summary>
        /// Id của tỉnh/thành phố.
        /// </summary>
        public int CityId { get; set; }

        /// <summary>
        /// Id của quận/huyện.
        /// </summary>
        public int DistrictId { get; set; }

        /// <summary>
        /// Id của phường/xã.
        /// </summary>
        public int WardId { get; set; }

        /// <summary>
        /// Địa chỉ đầy đủ.
        /// </summary>
        public required string FullAddress { get; set; }

        /// <summary>
        /// Ghi chú.
        /// </summary>
        public required string Note { get; set; }

        /// <summary>
        /// Thời gian hẹn lấy/giao hàng.
        /// </summary>
        public DateTimeOffset? ScheduledTime { get; set; }

        /// <summary>
        /// Chuỗi hiển thị thời gian hẹn lấy/giao hàng.
        /// </summary>
        public string ScheduledTimeStr => ScheduledTime.HasValue ? ScheduledTime.Value.ToLocalTime().ToString("dd/MM/yyyy HH:mm") : "";
    }
}
