package com.microservices.pms.productLibrary.domain.vo;

import com.alibaba.fastjson2.JSONObject;
import com.microservices.pms.productLibrary.domain.ProductLibraryRepositoriesFormatEnum;
import com.microservices.pms.utils.PmsUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Date;

/**
 * Nexus制品搜索对象
 *
 * @author otto
 * @date 2024-07-04
 */
@Data
@ApiModel("Nexus制品文件数据对象")
public class NexusAssetResultDataVo {
    /**
     * 制品文件标识
     */
    @ApiModelProperty(value = "制品文件标识")
    private String id;
    /**
     * 制品文件名称
     */
    @ApiModelProperty(value = "制品文件名称")
    private String name;
    /**
     * 制品格式
     */
    @ApiModelProperty(value = "制品格式")
    private String format;
    /**
     * 制品文件类型
     */
    @ApiModelProperty(value = "制品文件类型")
    private String contentType;
    /**
     * 制品文件大小
     */
    @ApiModelProperty(value = "制品文件大小")
    private long size;
    /**
     * 制品库标识
     */
    @ApiModelProperty(value = "制品库标识")
    private String repositoryName;
    /**
     * 包含制品库标识
     */
    @ApiModelProperty(value = "包含制品库标识")
    private String containingRepositoryName;
    /**
     * 制品文件创建时间
     */
    @ApiModelProperty(value = "制品文件创建时间")
    private Date blobCreated;
    /**
     * 制品文件更新时间
     */
    @ApiModelProperty(value = "制品文件更新时间")
    private Date blobUpdated;
    /**
     * 制品文件最近下载时间
     */
    @ApiModelProperty(value = "制品文件最近下载时间")
    private String lastDownloaded;
    /**
     * 制品文件描述
     */
    @ApiModelProperty(value = "制品文件描述")
    private String blobRef;
    /**
     * 制品标识
     */
    @ApiModelProperty(value = "制品标识")
    private String componentId;
    /**
     * 制品创建人
     */
    @ApiModelProperty(value = "制品创建人")
    private String createdBy;
    /**
     * 制品创建人ip地址
     */
    @ApiModelProperty(value = "制品创建人ip地址")
    private String createdByIp;
    /**
     * 额外属性
     */
    @ApiModelProperty(value = "额外属性")
    private JSONObject attributes;
    /**
     * 制品文件标识
     */
    @ApiModelProperty(value = "制品文件标识")
    private String fileIdentifier;
    /**
     * 制品文件名称
     */
    @ApiModelProperty(value = "制品文件名称")
    private String fileName;
    /**
     * 制品文件版本
     */
    @ApiModelProperty(value = "版本")
    private String version;
    /**
     * 制品文件目录
     */
    @ApiModelProperty(value = "制品文件目录")
    private String directory;

    public String parseFileName() {
        String[] pathSplit = this.name.split("/");
        if (pathSplit.length > 0) {
            return pathSplit[pathSplit.length - 1];
        }
        return this.name;

    }

    public String parseDirectory() {
        return PmsUtils.parseDirectory(this.name);
    }

    public String parseNexusVersion() {
        if (attributes == null) {
            return null;
        }
        ProductLibraryRepositoriesFormatEnum formatEnum = ProductLibraryRepositoriesFormatEnum.getByKey(format);
        switch (formatEnum) {
            case MAVEN: {
                if (attributes.containsKey("maven2")) {
                    JSONObject att = attributes.getJSONObject("maven2");
                    return att.getString("version");
                }
                return null;
            }
            case NPM: {
                if (attributes.containsKey("npm")) {
                    JSONObject att = attributes.getJSONObject("npm");
                    return att.getString("version");
                }
                return null;
            }
            case PYPI: {
                if (attributes.containsKey("pypi")) {
                    JSONObject att = attributes.getJSONObject("pypi");
                    return att.getString("version");
                }
                return null;
            }
            default: {
                return null;
            }
        }
    }

}
