using Lada.Framework.Data.Domains.BaseEntities;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace Lada.Framework.Data.Domains.Cms
{
    public class Post : BaseEntityWithKey<int>
    {
        /// <summary>
        /// Ảnh đại diện
        /// </summary>
        [MaxLength(1024)]
        public string Thumbnail { get; set; }

        /// <summary>
        /// Tiêu đề bài viết
        /// </summary>
        [MaxLength(512)]
        public string Title { get; set; }

        /// <summary>
        /// Mô tả ngắn
        /// </summary>
        [MaxLength(512)]
        public string ShortDescription { get; set; }

        /// <summary>
        /// Nội dung bài viết
        /// </summary>
        public string Description { get; set; }

        /// <summary>
        /// Trạng thái bài viết
        /// </summary>
        public PostStatus Status { get; set; } = PostStatus.Editting;

        /// <summary>
        /// Gets or sets the password
        /// </summary>
        public string Password { get; set; } = "";


        /// <summary>
        /// Trạng thái xem bài viết
        /// </summary>
        public PostVisibility Visibility { get; set; } = PostVisibility.Public;

        /// <summary>
        /// Ngày có hiệu lực
        /// </summary>
        public DateTimeOffset? ValidFrom { get; set; }

        /// <summary>
        /// Là bài viết nổi bật hay không?
        /// </summary>
        public bool IsFeatured { get; set; }

        /// <summary>
        /// Table of Content
        /// Từ thẻ H3 => H6
        /// Tự sinh trong khi thêm mới / cập nhật bài viết
        /// </summary>
        public string TOC { get; set; }

        #region TimeMonitor

        /// <summary>
        /// Ngày xuất bản
        /// </summary>
        //public DateTimeOffset? PublishDate { get; set; }

        /// <summary>
        /// Ngày làm mới
        /// Mỗi khi cập nhật nội dung, sau đó xuất bản lại thì cập nhật ngày này
        /// </summary>
        //public DateTimeOffset? RefreshDate { get; set; }

        #endregion
        public UrlRecord? UrlRecord { get; set; }

        public virtual ICollection<PostCategory>? PostCategories { get; set; } = new List<PostCategory>();
        public virtual ICollection<PostTag>? PostTags { get; set; } = new List<PostTag>();
        //public virtual IEnumerable<Keyword>? Keywords { get; set; }
        public virtual IEnumerable<Faq>? Faqs { get; set; }
        public virtual IEnumerable<Product>? Products { get; set; }
    }

    public enum PostStatus
    {
        [Description("Biên tập")]
        Editting = 10,
        [Description("Chờ xuất bản")]
        WaitToPublish = 15,
        [Description("Từ chối")]
        Rejected = 13,
        [Description("Xuất bản")]
        Published = 20
    }
    public enum PostVisibility
    {
        [Description("Công khai")]
        Public = 10,
        [Description("Nội bộ")]
        Private = 20,
        [Description("Mật khẩu bảo vệ")]
        Password = 25,
        [Description("Ngừng hiển thị")]
        None = 13,
    }


}
