import { BoardLayout, BoardSort } from '@/constants/forum';

// 게시판 설정 값
export default interface BoardMeta {
	id: number;
	boardID: number;
	list: BoardListMeta;
	view: BoardViewMeta;
	write: BoardWriteMeta;
	general: BoardGeneralMeta;
	comment: BoardCommentMeta;
	permission: BoardPermissionMeta;
	notify: BoardNotifyMeta;
	notifyTemplate: BoardNotifyTemplateMeta;
	exp: BoardExpMeta;
}

// 게시판 목록 설정
export interface BoardListMeta {
	showHeader: boolean;
	headerContent: string|null;
	showFooter: boolean;
	footerContent: string|null;
	layout: BoardLayout;
	sort: BoardSort;
	perPage: number;
	alwaysShowWriteButton: boolean;
	showFooterListView: boolean;
	isNewIcon: boolean;
	isHotIcon: boolean;
	exceptNotice: boolean;
	exceptSpeaker: boolean;
}

// 게시판 권한 설정
export interface BoardPermissionMeta {
	boardAccess: number;
	postView: number;
	postWrite: number;
	commentView: number;
	commentWrite: number;
	replyWrite: number;
	fileUpload: number;
	fileDownload: number;
}

// 알림 설정
export interface BoardNotifyMeta {
	postWriteNotify: number|null;
	commentWriteNotify: number|null;
	postWriteNotifyEnum: number|null;
	commentWriteNotifyEnum: number|null;
	replyWriteNotifyEnum: number|null;
}

// 알림 양식 설정
export interface BoardNotifyTemplateMeta {
	postWriteEmailNotifySubject: string|null,
	postWriteEmailNotifyContent: string|null,
	commentWriteEmailNotifySubject: string|null,
	commentWriteEmailNotifyContent: string|null,
	replyWriteEmailNotifySubject: string|null,
	replyWriteEmailNotifyContent: string|null
}

// 경험치 설정
export interface BoardExpMeta {
	enableExp: boolean;
	showExpGuide: boolean;
	postWriteExp: number|null;
	commentWriteExp: number|null;
	fileUploadExp: number|null;
	fileDownloadExp: number|null;
	otherPostReadExp: number|null;
	otherPostLikeExp: number|null;
	otherPostDisLikeExp: number|null;
	otherCommentLikeExp: number|null;
	otherCommentDisLikeExp: number|null;
	ownPostReadExp: number|null;
	ownPostLikeExp: number|null;
	ownPostDisLikeExp: number|null;
	ownCommentLikeExp: number|null;
	ownCommentDisLikeExp: number|null;
	postWriteUndoExp: number|null;
	commentWriteUndoExp: number|null;
	fileUploadUndoExp: number|null;
	otherPostReadUndoExp: number|null;
	otherPostLikeUndoExp: number|null;
	otherPostDisLikeUndoExp: number|null;
	otherCommentLikeUndoExp: number|null;
	otherCommentDisLikeUndoExp: number|null;
	ownPostReadUndoExp: number|null;
	ownPostLikeUndoExp: number|null;
	ownPostDisLikeUndoExp: number|null;
	ownCommentLikeUndoExp: number|null;
	ownCommentDisLikeUndoExp: number|null;
	postWriteExpWithinDays: number|null;
	commentWriteExpWithinDays: number|null;
	fileUploadExpWithinDays: number|null;
	otherPostReadExpWithinDays: number|null;
	otherPostLikeExpWithinDays: number|null;
	otherPostDisLikeExpWithinDays: number|null;
	otherCommentLikeExpWithinDays: number|null;
	otherCommentDisLikeExpWithinDays: number|null;
	ownPostReadExpWithinDays: number|null;
	ownPostLikeExpWithinDays: number|null;
	ownPostDisLikeExpWithinDays: number|null;
	ownCommentLikeExpWithinDays: number|null;
	ownCommentDisLikeExpWithinDays: number|null;
}

// 게시글 열람 속성
export interface BoardViewMeta {
	allowBookmark: boolean;
	allowLike: boolean;
	allowDislike: boolean;
	allowPrint: boolean;
	allowSnsShare: boolean;
	allowPrevNextBotton: boolean;
	allowBlame: boolean;
	blameHideCount: number;
	allowContentLinkTargetBlank: boolean;
	allowPostUrlCopy: boolean;
	allowPostUrlQrCode: boolean;
	showMemberThumb: boolean;
	showMemberIcon: boolean;
	showMemberRegDate: boolean;
	showMemberSummary: boolean;
}

// 게시글 작성 속성
export interface BoardWriteMeta {
	showHeader: boolean;
	headerContent: string|null;
	showFooter: boolean;
	footerContent: string|null;
	defaultSubject: string|null;
	defaultContent: string|null;
	allowEditor: boolean;
	allowSaveExternalImage: boolean;
	allowPrefix: boolean;
	requiredPrefix: boolean;
	allowSecret: boolean;
	allowTag: boolean;
	tagLimit: number;
	allowImage: boolean;
	imageUploadLimit: number;
	imageUploadMaxSize: number;
	allowMedia: boolean;
	mediaUploadLimit: number;
	allowFile: boolean;
	fileUploadLimit: number;
	fileUploadMaxSize: number;
	fileUploadExtension: string[];
}

// 게시글 일반 속성
export interface BoardGeneralMeta {
	deleteProtectionDays: number;
	updateProtectionDays: number;
	allowDeleteProtection: boolean;
	allowUpdateProtection: boolean;
	enableFileDownLog: boolean;
	enablePostUpdateLog: boolean;
}

// 댓글 속성
export interface BoardCommentMeta {
	id: number;
	boardID: number;
	enableComment: boolean;
	perPage: number;
	allowLike: boolean;
	allowDisLike: boolean;
	showMemberThumb: boolean;
	showMemberIcon: boolean;
	contentPlaceholder: string|null;
	minContentLength: number;
	maxContentLength: number;
	enableEditor: boolean;
	allowSecret: boolean;
	blameHideCount: number;
	deleteProtectionDays: number;
	updateProtectionDays: number;
	allowDeleteProtection: boolean;
	allowUpdateProtection: boolean;
	enableCommentUpdateLog: boolean;
};