namespace Ladaer.BackEnd.Infrastructures.DTO.Items.Categories
{
    /// <summary>
    /// Item hiển thị location dưới dạng cây (hierarchical)
    /// </summary>
    public class LocationTreeItem
    {
        /// <summary>
        /// ID của location
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// Tên location
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// Tên đầy đủ (bao gồm cả tên cha)
        /// </summary>
        public string FullName { get; set; }

        /// <summary>
        /// Cấp độ (1: Tỉnh/Thành phố, 2: Quận/Huyện, 3: Phường/Xã)
        /// </summary>
        public byte Level { get; set; }

        /// <summary>
        /// ID của location cha
        /// </summary>
        public int ParentId { get; set; }

        /// <summary>
        /// Loại vùng phủ
        /// </summary>
        public string Type { get; set; }

        /// <summary>
        /// Tiền tố (Thành phố, Tỉnh, Quận, Huyện, Phường, Xã)
        /// </summary>
        public string Prefix { get; set; }

        /// <summary>
        /// Thứ tự hiển thị
        /// </summary>
        public int DisplayOrder { get; set; }

        /// <summary>
        /// Danh sách location con (Quận/Huyện hoặc Phường/Xã)
        /// </summary>
        public List<LocationTreeItem> Children { get; set; } = new List<LocationTreeItem>();

        /// <summary>
        /// Có location con hay không
        /// </summary>
        public bool HasChildren => Children != null && Children.Any();

        /// <summary>
        /// Số lượng location con (dựa trên Children đã load)
        /// </summary>
        public int ChildrenCount => Children?.Count ?? 0;

        /// <summary>
        /// Số lượng location con có thể load (chưa được assign)
        /// </summary>
        public int AvailableChildrenCount { get; set; }
    }
}

