using PowerEasy.WebFuture.DataMigrations.Foundation.Enum;
using PowerEasy.WebFuture.DataMigrations.Foundation.Enum.ContentManage;

namespace PowerEasy.WebFuture.DataMigrations.MigrationProgramme.SiteFactoryProgramme.Model
{
    /// <summary>
    /// 节点。
    /// </summary>
    public class Node
    {
        /// <summary>
        /// 节点Id。
        /// </summary>
        public int NodeId { get; set; }

        /// <summary>
        /// 所属站点Id。
        /// </summary>
        public int SiteId { get; set; }

        /// <summary>
        /// 节点模型Id。
        /// </summary>
        public int? NodeMoldId { get; set; }

        /// <summary>
        /// 节点名称。
        /// </summary>
        public string NodeName { get; set; }

        /// <summary>
        /// 节点标识符。
        /// </summary>
        public string Identifier { get; set; }

        /// <summary>
        /// 节点内容模型Id。
        /// </summary>
        public int? MoldId { get; set; }

        /// <summary>
        /// 节点编码。
        /// </summary>
        public string NodeCode { get; set; } = string.Empty;

        /// <summary>
        /// 节点类型。
        /// </summary>
        public NodeType NodeType { get; set; }

        /// <summary>
        /// 归档状态。
        /// </summary>
        public bool Archived { get; set; } = false;

        /// <summary>
        /// 归档时间。
        /// </summary>
        public DateTime? ArchivedTime { get; set; } = null;

        /// <summary>
        /// 外部链接地址。
        /// </summary>
        public string LinkUrl { get; set; }

        /// <summary>
        /// 节点图片。
        /// </summary>
        public string FeaturedImage { get; set; }

        /// <summary>
        /// 描述。
        /// </summary>
        public string Description { get; set; }

        /// <summary>
        /// 引用节点数量。
        /// </summary>
        public int NodeReferenceCount { get; set; } = 0;

        /// <summary>
        /// 采集了此节点的节点/接口数量。
        /// </summary>
        public int NodeCollectedByCount { get; set; } = 0;

        /// <summary>
        /// 节点META关键词，多个关键词请用,号分隔。
        /// </summary>
        /// <remarks>针对搜索引擎设置的关键词,多个关键词请用,号分隔。</remarks>
        public string MetaKeywords { get; set; } = string.Empty;

        /// <summary>
        /// 节点META网页描述，多个关键词请用,号分隔。
        /// </summary>
        /// <remarks>针对搜索引擎设置的网页描述,多个关键词请用,号分隔。</remarks>
        public string MetaDescription { get; set; } = string.Empty;

        /// <summary>
        /// 节点META栏目类别。
        /// </summary>
        public string ColumnType { get; set; } = string.Empty;

        /// <summary>
        /// 列表页路由规则。
        /// </summary>
        public string ListPageRouteRule { get; set; }

        /// <summary>
        /// 内容页路由规则。
        /// </summary>
        public string ContentPageRouteRule { get; set; }

        /// <summary>
        /// 列表页模板。
        /// </summary>
        public string ListHomeViewPath { get; set; }

        /// <summary>
        /// 列表页模板。
        /// </summary>
        public string ListViewPath { get; set; }

        /// <summary>
        /// 单页模板。
        /// </summary>
        public string SingleViewPath { get; set; }

        /// <summary>
        /// 内容页模板。
        /// </summary>
        public string ContentViewPath { get; set; }

        /// <summary>
        /// 搜索结果页模板。
        /// </summary>
        public string SearchListViewPath { get; set; }

        /// <summary>
        /// 节点部门Id。
        /// </summary>
        public int? DepartmentId { get; set; } = null;

        /// <summary>
        /// 审核流程。
        /// </summary>
        public int? AuditProcessId { get; set; } = null;

        /// <summary>
        /// 是否开启评论。
        /// </summary>
        public bool EnabledComment { get; set; } = false;

        /// <summary>
        /// 栏目下的内容是否默认开启评论。
        /// </summary>
        public bool DefaultEnabledContentComment { get; set; } = false;

        /// <summary>
        /// 是否启用发文部门。
        /// </summary>
        public bool DispatchDepartmentEnabled { get; set; } = false;

        /// <summary>
        /// 禁止添加内容。
        /// </summary>
        public bool ContentChangeless { get; set; } = false;

        /// <summary>
        /// 是否允许修改已经审核通过的内容。
        /// </summary>
        public bool EnableModifyAfterAudit { get; set; } = true;

        /// <summary>
        /// 是否强制关闭敏感信息过滤功能。
        /// </summary>
        public bool IsCloseSensitiveInformationFiltering { get; set; } = false;

        /// <summary>
        /// 前台访问权限。
        /// </summary>
        public PurviewType PurviewType { get; set; } = PurviewType.Open;

        /// <summary>
        /// 会员投稿权限。
        /// </summary>
        public UserGroupContributePurviewType UserGroupContributePurviewType { get; set; } = UserGroupContributePurviewType.None;

        /// <summary>
        /// 是否启用全文检索。
        /// </summary>
        public bool IsEnableFulltextSearch { get; set; } = true;

        /// <summary>
        /// 用户投稿自动终审通过并发布。
        /// </summary>
        public bool UserContributeAutoApprove { get; set; } = false;

        /// <summary>
        /// 报送/推送权限。
        /// </summary>
        public SendPermissionType SendPermissionType { get; set; } = SendPermissionType.NotAllowSend;

        /// <summary>
        /// 此节点是否在菜单上显示。
        /// </summary>
        public bool ShowOnMenu { get; set; } = true;

        /// <summary>
        /// 每页显示的内容数。
        /// </summary>
        public int ContentPageSize { get; set; } = 10;

        /// <summary>
        /// 此节点下的内容列表的排序方式。
        /// </summary>
        public OrderType ContentOrderType { get; set; } = OrderType.PublishTimeDesc;

        /// <summary>
        /// 节点状态：开启/关闭。
        /// </summary>
        public NodeStatus NodeStatus { get; set; } = NodeStatus.Open;

        /// <summary>
        /// 上次节点状态。
        /// </summary>
        public NodeStatus? LastNodeStatus { get; set; } = null;

        /// <summary>
        /// 更新预警规则。
        /// </summary>
        public int? NodeUpdateCycleId { get; set; } = null;

        /// <summary>
        /// 是否位置导航处显示。
        /// </summary>
        public bool ShowOnPath { get; set; } = true;

        /// <summary>
        /// 是否在网站地图（节点导航）处显示。
        /// </summary>
        public bool ShowOnMap { get; set; } = true;

        /// <summary>
        /// 是否在父节点的分类列表处显示。
        /// </summary>
        public bool ShowOnParentNodeList { get; set; } = true;

        /// <summary>
        /// 此节点是否在菜单新窗口打开。
        /// </summary>
        public bool IsBlank { get; set; } = true;

        /// <summary>
        /// 此节点下的内容是否在新窗口打开。
        /// </summary>
        public bool ContentOpenInNewTarget { get; set; } = true;

        /// <summary>
        /// 禁用此节点的页面输出缓存。
        /// </summary>
        public bool ForbiddenViewCache { get; set; } = false;

        /// <summary>
        /// 禁用此节点的生成HTML功能。
        /// </summary>
        public bool ForbiddenStaticHtml { get; set; } = false;

        /// <summary>
        /// 列表页分页生成HTML的页数。
        /// </summary>
        public int StaticHtmlGenerateListPageCount { get; set; } = 10;

        /// <summary>
        /// 内容编辑区最大宽度。
        /// </summary>
        public string NodeEditorWidth { get; set; } = string.Empty;

        /// <summary>
        /// 开启订阅。
        /// </summary>
        public bool EnableSubscribe { get; set; } = false;

        /// <summary>
        /// 是否为默认订阅节点。
        /// </summary>
        public bool IsDefaultSubscribe { get; set; } = false;

        /// <summary>
        /// 是否启用手机模板。
        /// </summary>
        public bool PhoneViewEnabled { get; set; } = true;

        /// <summary>
        /// 是否启用平板模板。
        /// </summary>
        public bool PadViewEnabled { get; set; } = true;

        /// <summary>
        /// 此节点相关内容的显示数。
        /// </summary>
        public int RelatedContentCount { get; set; } = 10;

        /// <summary>
        /// 此节点是否自动补全关联内容。
        /// </summary>
        public bool EnableAutoCompleteRelatedContent { get; set; } = true;

        /// <summary>
        /// 原数据库节点Id。
        /// </summary>
        public string SourceNodeId { get; set; }

        /// <summary>
        /// 扩展内容（用于后台扩展字段内容的保存）。
        /// </summary>
        public string ExtendContent { get; set; } = "<ExtendContent />";

        /// <summary>
        /// IP访问限定设置。
        /// </summary>
        public string IPLimitSetting { get; set; } = string.Empty;

        /// <summary>
        /// 节点路由Url。
        /// </summary>
        public string NodeRouteUrl { get; set; } = string.Empty;

        /// <summary>
        /// 订阅数。
        /// </summary>
        public int Subscriptions { get; set; } = 0;

        /// <summary>
        /// 节点负责人。
        /// </summary>
        public int? AdministratorId { get; set; } = null;

        /// <summary>
        /// 访问限定方式。
        /// </summary>
        public IPLimitType IPLimitType { get; set; } = IPLimitType.AllowAll;

        /// <summary>
        /// 学习用户组。
        /// </summary>
        public string StudyUserGroupList { get; set; } = string.Empty;

        /// <summary>
        /// 学习资料默认完成标准。
        /// </summary>
        public int? StudyNodeDefaultTime { get; set; } = null;

        /// <summary>
        /// 启用在线学习。
        /// </summary>
        public bool IsStudyNode { get; set; } = false;

        /// <summary>
        /// 节点左标识。
        /// </summary>
        public int Left { get; set; }

        /// <summary>
        /// 节点右标识。
        /// </summary>
        public int Right { get; set; }

        /// <summary>
        /// 节点在树中的深度。
        /// </summary>
        public int Depth { get; set; }
    }
}
