package org.lym.pom.repository.mongo;

import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.lang.NonNull;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import static org.lym.pom.repository.mongo.Category.COLLECTION_NAME;

/**
 * 投稿分类信息
 */
@Document(collection = COLLECTION_NAME)
@Data
@NoArgsConstructor
public class Category implements Serializable {

    public static final String COLLECTION_NAME = "categories";

    /**
     * id
     */
    @Id
//    @JsonProperty("_id") // 为_id字段提供JSON序列化时的名称
    private String id;

    /**
     * 类别名称
     */
    @NonNull
    private String name;

    /**
     * 类别描述
     */
    @NonNull
    private String description;

    /**
     * 类别图标地址
     */
    @NonNull
    private String icon;

    /**
     * 封面图片地址
     */
    private String coverImage;

    /**
     * 类别显示顺序，默认值0
     */
    private Integer displayOrder;

    /**
     * 该类别下文章阅读数量
     */
    private Integer viewCount;

    /**
     * 该类别下文章数量
     */
    private Integer articleCount;

    /**
     * 父类别ID
     */
    private String parentId;

    /**
     * 分类层级，默认为0代表顶级分类
     */
    private Integer level;

    /**
     * 类别状态枚举
     */
    public enum StatusEnum {
        ENABLED, DISABLED, DELETED
    }

    private StatusEnum status;

    /**
     * 创建时间
     */
//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Long createTime;

    /**
     * 最后更新时间
     */
//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Long updateTime;

    /**
     * 元数据信息，存储一些额外的扩展属性，比如SEO关键词、描述等。
     */
    private Map<String, String> metaInfo;

    /**
     * 虚拟分类标识
     */
    private Boolean virtual;

    /**
     * 子分类列表 冗余
     */
    private transient List<Category> subCategories;

}
