package cn.sikey.mcdisk.controller.app.wristwatch.vo;

import cn.sikey.mcdisk.enums.CatalogTypeEnum;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * @Author: nelson
 * @Date: 2025/5/30
 * @Description: 上传文件到家庭云
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class GetFileUploadURLReqVO {

    /**
     * ticket
     */
    @NotBlank(message = "ticket是空")
    private String ticket;

    /**
     * 用户信息
     */
    @NotNull(message = "用户信息是空")
    private CommonAccountInfo commonAccountInfo;

    /**
     * 上传文件路径
     */
    @NotBlank(message = "上传文件路径是空")
    private String path;

    /**
     * 家庭云ID
     * catalogType不为4时必传
     */
    private String cloudID;

    /**
     * 云类型
     * 1：家庭云
     * catalogType不为4时必传
     * 历史原因导致的冗余字段，兼容现有客户端，需要固定传1
     */
    private Integer cloudType = CatalogTypeEnum.ORDINARY_PHOTO_ALBUM.getValue();

    /**
     * 目录类型：
     * 1：普通相册
     * 2：音乐目录
     * 3：文档目录
     * 4：头像目录
     * 5：影集目录
     * 6：杂志目录
     */
    @NotNull(message = "目录类型是空")
    private Integer catalogType = CatalogTypeEnum.ORDINARY_PHOTO_ALBUM.getValue();

    /**
     * 上传文件总数。目前仅支持单个文件上传
     */
    @NotNull(message = "上传文件总数是空")
    private Integer fileCount;

    /**
     * 上传文件总大小(单位Byte)
     */
    @NotNull(message = "上传文件总大小是空")
    private Long totalSize;

    /**
     * 待上传文件列表，目前只支持单个文件上传
     */
    @NotEmpty(message = "待上传文件列表是空")
    private List<UploadContent> uploadContentList;

    /**
     * 用户信息
     */
    @Data
    public static class CommonAccountInfo {

        /**
         * 用户类型
         */
        @NotNull(message = "用户类型是空")
        private Integer accountType;
    }

    /**
     * 待上传文件
     */
    @Data
    public static class UploadContent {

        private Integer comlexFlag;

        private String contentDesc;

        private String contentName;

        private Integer contentSize;

        private Integer fileEtag;

        private Integer fileVersion;

        /**
         * 是否手动重命名。
         * 0：重命覆盖（默认取值）
         * 1：手动重名（暂不支持）
         * 2：云端自动重命名
         * 3：云端强制自动重命名
         * 4：重名覆盖(区分MD5)
         */
        private Integer manualRename;

        /**
         * 序列号（针对V3接口有效。若需传入序列号，请使用V3接口）
         */
        private String seqNo;
    }
}

