using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations.Schema;

namespace bitforum.Models.BBS
{
    [Table("CommentMeta")]
    public class CommentMeta()
    {
        [ForeignKey("BoardID")]
        public Board Board { get; set; } = null!;

        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [DisplayName("PK")]
        [Comment("PK")]
        public int ID { get; set; }

        [Required]
        [DisplayName("게시판 ID")]
        [Comment("게시판 ID")]
        public int BoardID { get; set; }

        [DisplayName("댓글 사용")]
        [Comment("댓글 사용")]
        public bool EnableComment { get; set; } = false;

        [DisplayName("목록 표시")]
        [Comment("목록 표시")]
        public ushort PerPage { get; set; } = 0;

        [DisplayName("댓글 공감 사용")]
        [Comment("댓글 공감 사용")]
        public bool AllowLike { get; set; } = false;

        [DisplayName("댓글 비공감 사용")]
        [Comment("댓글 비공감 사용")]
        public bool AllowDisLike { get; set; } = false;

        [DisplayName("회원 사진 공개")]
        [Comment("회원 사진 공개")]
        public bool ShowMemberPhoto { get; set; } = false;

        [DisplayName("회원 아이콘 공개")]
        [Comment("회원 아이콘 공개")]
        public bool ShowMemberIcon { get; set; } = false;

        [DisplayName("안내 문구")]
        [Comment("안내 문구")]
        [StringLength(1000)]
        public string? ContentPlaceholder { get; set; } = null;

        [DisplayName("최소 입력 글자")]
        [Comment("최소 입력 글자")]
        public ushort MinContentLength { get; set; } = 0;

        [DisplayName("최대 입력 글자")]
        [Comment("최대 입력 글자")]
        public ushort MaxContentLength { get; set; } = 0;

        [DisplayName("웹 에디터 사용")]
        [Comment("웹 에디터 사용")]
        public bool EnableEditor { get; set; } = false;

        [DisplayName("비밀글 사용")]
        [Comment("비밀글 사용")]
        public bool AllowSecret { get; set; } = false;

        [DisplayName("댓글 신고 시 숨김")]
        [Comment("댓글 신고 시 숨김")]
        public ushort BlameHideCount { get; set; } = 0;

        [DisplayName("댓글 삭제 금지 기간")]
        [Comment("댓글 삭제 금지 기간")]
        public ushort DeleteProtectionDays { get; set; } = 0;

        [DisplayName("댓글 수정 금지 기간")]
        [Comment("댓글 수정 금지 기간")]
        public ushort UpdateProtectionDays { get; set; } = 0;

        [DisplayName("댓글 보호 기능 (삭제 시)")]
        [Comment("댓글 보호 기능 (삭제 시)")]
        public bool AllowDeleteProtection { get; set; } = false;

        [DisplayName("댓글 보호 기능 (수정 시)")]
        [Comment("댓글 보호 기능 (수정 시)")]
        public bool AllowUpdateProtection { get; set; } = false;

        [DisplayName("댓글 변경 기록")]
        [Comment("댓글 변경 기록")]
        public bool EnableCommentUpdateLog { get; set; } = false;
    }
}
