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

import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @Author: nelson
 * @Date: 2025/5/30
 * @Description: 查询家庭云相册内容列表V3
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class QueryContentInfoV3ReqVO {

    /**
     * 文件类型，缺省显示全部类型的文件
     */
    private Integer contentType;

    /**
     * 文件后缀名，支持多个后缀名，格式为竖线分隔的多个扩展名集合：aaa|bbb|ccc…|zzz。如果只有一个扩展名，格式就是：aaa。最大支持100个后缀名
     */
    @NotBlank(message = "文件后缀名是空")
    private String contentSuffix;

    /**
     * 文件列表的排序方式，默认按修改时间。支持修改时间、名称、类型、大小。支持正反序。
     * 0：修改时间
     * 1：名称
     * 2：类型
     * 3：大小
     * 4：照片拍摄时间（如果没有拍摄时间，则以上传时间排序）
     * 5：上传时间
     * 6：照片拍摄时间（如果没有拍摄时间，则以上传时间排序）—对应过滤时间按照拍摄时间+上传时间组合的方式（详见beginDate-endDate字段说明）
     * 7：拍摄时间(拍摄时间为空固定在分页后面，多条拍摄时间为空数据根据上传时间排序，排序方向为sortDirection指定的方向)
     */
    private Integer contentSortType;

    /**
     * 文件的排序方向。默认按正序：
     * 0：正序
     * 1：反序
     */
    private Integer sortDirection;

    /**
     * 返回结果的起始编号。
     * 说明
     * 当为－1时，endNumber忽略，返回全部列表。当大于0时，从实际开始的标号返回。当为0时，作为错误处理。
     */
    private Integer startNumber;

    /**
     * 返回结果的结束编号。
     * 说明
     * startNumber 和endNumber两个参数是为了客户端实现分页显示，每次返回指定数目的结果，当startNumber为大于0时，不能小于startNumber，否则返回参数错误，当实际条数没有endNumber多时，返回实际条数 。
     */
    private Integer endNumber;

    /**
     * 待查询的父目录ID（相册ID）
     */
    @NotBlank(message = "父目录ID是空")
    private String catalogID;

    /**
     * 开始时间， 默认为空，也就是说时间范围查询失效。
     * 格式为YYYYMMDDhhmmss
     * <p>
     * 只有在contentSortType=6的场景下，时间过滤逻辑为：拍摄时间过滤，没有拍摄时间的按照上传时间过滤
     */
    private String beginDate;

    /**
     * 结束时间，默认为空，也就是说时间范围查询失效。
     * 格式为YYYYMMDDhhmmss
     */
    private String endDate;

    /**
     * 相册类型
     * 1、普通相册
     * 2、头像目录
     * 4、音乐目录默认为1
     */
    private String photoType;
}
