package com.microservices.zone.resource.domain;

import com.alibaba.fastjson2.JSONObject;
import com.microservices.common.core.annotation.Excel;
import com.microservices.common.core.utils.bean.BeanUtils;
import com.microservices.zone.detail.domain.ZoneSort;
import com.microservices.zone.resource.domain.vo.ZoneResourceDataVo;
import com.microservices.zone.resource.utils.ResourceExtendDataUtils;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Date;
import java.util.List;

/**
 * 特色专区资源聚合对象 zone_resource
 *
 * @author otto
 * @date 2023-06-27
 */
@Data
public class ZoneResource extends ZoneSort {
    public static final String table_name = "zone_resource";

    /**
     * 资源名称
     */
   @ApiModelProperty(value = "资源名称")
    private String name;

    /**
     * 资源介绍
     */
    @ApiModelProperty(value = "资源介绍")
    private String introduction;

    /**
     * 资源文件Id列表
     */
    @ApiModelProperty(value = "资源文件Id列表")
    private String fileIds;

    /**
     * 资源领域Id
     */
    @ApiModelProperty(value = "资源领域Id")
    private Long domainId;

    /**
     * 资源类型Id列表
     */
    @ApiModelProperty(value = "资源类型Id列表")
    private Long[] typeIds;

    /**
     * 查找的资源类型Id
     */
    @ApiModelProperty(value = "查找的资源类型Id")
    private Long searchTypeId;

    /**
     * 文本编辑器类型
     */
    private String editorType;

    @ApiModelProperty(value = "资源简介")
    private String summary;

    @ApiModelProperty(value = "审核状态（0：待审核，1：审核通过 2：审核不通过）")
    private String auditStatus;
    /**
     * 是否首页展示（0代表不展示 1代表展示）
     */
    @ApiModelProperty(value = "是否首页展示（0代表不展示 1代表展示）")
    private String isHomepage;
    /**
     * 审核时间
     */
    @ApiModelProperty(value = "审核时间")
    private Date auditTime;
    @ApiModelProperty(value = "审核人")
    private String auditBy;
    /**
     * 资源类型
     */
    private List<ZoneResourceType> zoneResourceTypeList;
    /**
     * 资源领域
     */
    private ZoneResourceDomain zoneResourceDomain;

    /**
     * 资源标签
     */
    @ApiModelProperty(value = "资源标签")
    private String keywords;

    @ApiModelProperty(value = "拓展数据（JSON格式）")
    private JSONObject extendData;

    /**
     * 资源分类：SKILL/MODEL/DATASET（NULL表示原有专区资源）
     */
    @ApiModelProperty(value = "资源分类：SKILL/MODEL/DATASET")
    private String resourceCategory;

    /**
     * 浏览次数
     */
    @ApiModelProperty(value = "浏览次数")
    private Integer viewCount;

    /**
     * 点赞次数
     */
    @ApiModelProperty(value = "点赞次数")
    private Integer likeCount;

    public ZoneResourceDataVo toZoneResourceDataVo() {
        ZoneResourceDataVo target = new ZoneResourceDataVo();
        BeanUtils.copyProperties(this, target);
        if (this.getZoneResourceDomain() != null) {
            target.setDomainName(this.getZoneResourceDomain().getName());
        }

        return target;
    }

    // ==================== extendData 便捷方法 ====================

    /**
     * 获取 SKILL.md 内容（从 extendData 中提取）
     */
    public String getSkillContent() {
        return ResourceExtendDataUtils.extractSkillContent(this.extendData);
    }

    /**
     * 获取目录树 JSON（从 extendData 中提取）
     */
    public JSONObject getSkillFileTree() {
        return ResourceExtendDataUtils.extractSkillFileTree(this.extendData);
    }

    /**
     * 设置 SKILL.md 内容（更新 extendData）
     */
    public void setSkillContent(String skillContent) {
        this.extendData = ResourceExtendDataUtils.updateSkillContent(this.extendData, skillContent);
    }

    /**
     * 设置目录树 JSON（更新 extendData）
     */
    public void setSkillFileTree(JSONObject fileTreeJson) {
        this.extendData = ResourceExtendDataUtils.updateSkillFileTree(this.extendData, fileTreeJson);
    }
}
