using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace Lada.Framework.Data.Domains.Categories
{
    /// <summary>
    /// Thông tin tỉnh / quận / phường
    /// </summary>
    public class Location : BaseCategory
    {
        /// <summary>
        /// Mã tỉnh / quận / phường
        /// </summary>
        [MaxLength(16)]
        public string Code { get; set; }

        [MaxLength(128)]
        public string Prefix { get; set; } = "";

        /// <summary>
        /// Danh mục cha
        /// </summary>
        public int ParentId { get; set; }

        /// <summary>
        /// 1: Tỉnh / thành phố, 2: Quận / huyện, 3: Phường / xã
        /// </summary>
        public byte Level { get; set; }

        /// <summary>
        /// Tên ghép, dùng để ghép tên của quận + tỉnh/thành phố lại
        /// </summary>
        [MaxLength(512)]
        public string CombinedName { get; set; } = "";

        /// <summary>
        /// Tên ghép, dùng để ghép tên của quận + tỉnh/thành phố lại
        /// </summary>
        [MaxLength(512)]
        public string UnsignCombinedName { get; set; } = "";

        /// <summary>
        /// Thông tin khu vực để tính giá
        /// Thông tin này có thể cân nhắc bỏ đi, 
        /// Vì có thể cấu hình hẳn trực tiếp theo vị trí từ huyện tới huyện
        /// Đối với trường hợp khách chạy đồng giá thì sẽ có cấu hình đồng giá
        /// Đầu vào là giá trị đồng giá, bước giá
        /// </summary>
        //public int ZoneId { get; set; }

        /// <summary>
        /// Đối với quận/huyện hoặc phường/xã, trường này xác định có
        /// phải là trung tâm tỉnh hoặc trung tâm quận/huyện hay ko
        /// </summary>
        //public bool IsCenter { get; set; }



        /// <summary>
        /// Phân loại khu vực
        /// </summary>
        public LocationType Type { get; set; }

        /// <summary>
        /// Latitude của địa chỉ
        /// </summary>
        public double Lat { get; set; }

        /// <summary>
        /// Longitude của địa chỉ
        /// </summary>
        public double Long { get; set; }


        #region Agency
        public int AgencyId { get; set; }
        #endregion
    }

    /// <summary>
    /// Nội thành thì lấy trả tận nơi không mất phí
    /// Ngoại thành thì vẫn phục vụ nhưng sẽ có thêm phụ phí lấy trả tận nơi
    /// Không phục vụ là các khu vực xe chưa chạy qua và không chạy qua
    /// </summary>
    public enum LocationType
    {
        [Description("Nội thành")]
        Urban = 1,
        [Description("Ngoại thành")]
        SubUrban = 2,
        [Description("Chưa phục vụ")]
        NotServed = 3,
    }

}
