package com.tourism.webadmin.back.dto;

import com.tourism.common.core.validator.UpdateGroup;
import com.tourism.common.core.validator.ConstDictRef;
import com.tourism.webadmin.back.model.constant.IsTrue;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import jakarta.validation.constraints.*;

/**
 * 聊天群聊管理Dto对象。
 *
 * @author 吃饭睡觉
 * @date 2024-09-06
 */
@Schema(description = "聊天群聊管理Dto对象")
@Data
public class TourImGroupDto {

    /**
     * id。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "id。可支持等于操作符的列表数据过滤。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "数据验证失败，id不能为空！", groups = {UpdateGroup.class})
    private Long id;

    /**
     * 群聊所属类型id。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "群聊所属类型id。可支持等于操作符的列表数据过滤。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "数据验证失败，群聊所属类型id不能为空！")
    private Long belongTypeId;

    /**
     * 群主id。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "群主id。可支持等于操作符的列表数据过滤。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "数据验证失败，群主id不能为空！")
    private Long leaderId;

    /**
     * 群聊名称。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "群聊名称。可支持等于操作符的列表数据过滤。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotBlank(message = "数据验证失败，群聊名称不能为空！")
    private String groupName;

    /**
     * 群聊头像。
     */
    @Schema(description = "群聊头像。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotBlank(message = "数据验证失败，群聊头像不能为空！")
    private String groupAvatar;

    /**
     * 群聊描述。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "群聊描述。可支持等于操作符的列表数据过滤。")
    private String description;

    /**
     * 是否公开展示 0隐藏 1公开。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "是否公开展示 0隐藏 1公开。可支持等于操作符的列表数据过滤。")
    @ConstDictRef(constDictClass = IsTrue.class, message = "数据验证失败，是否公开展示 0隐藏 1公开为无效值！")
    private Integer isPublic;

    /**
     * 是否开启群聊邀请确认 0不开启 1开启。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "是否开启群聊邀请确认。可支持等于操作符的列表数据过滤。")
    @ConstDictRef(constDictClass = IsTrue.class, message = "数据验证失败，是否开启群聊邀请确认 0不开启 1开启为无效值！")
    private Integer isNeedConfirm;

    /**
     * 通知分类 0单聊 1群聊。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "通知分类 0单聊 1群聊。可支持等于操作符的列表数据过滤。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "数据验证失败，通知分类 0单聊 1群聊不能为空！")
    private Integer noticeType;

    /**
     * 是否封禁 0封禁 1正常。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "是否正常 0封禁 1正常。可支持等于操作符的列表数据过滤。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "数据验证失败，是否封禁 0封禁 1正常不能为空！", groups = {UpdateGroup.class})
    @ConstDictRef(constDictClass = IsTrue.class, message = "数据验证失败，是否封禁 0封禁 1正常为无效值！")
    private Integer bannedStatus;

    /**
     * 热度值。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "热度值。可支持等于操作符的列表数据过滤。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "数据验证失败，热度值不能为空！", groups = {UpdateGroup.class})
    private Integer hotValue;

    /**
     * hotValue 范围过滤起始值(>=)。
     * NOTE: 可支持范围操作符的列表数据过滤。
     */
    @Schema(description = "hotValue 范围过滤起始值(>=)。可支持范围操作符的列表数据过滤。")
    private Integer hotValueStart;

    /**
     * hotValue 范围过滤结束值(<=)。
     * NOTE: 可支持范围操作符的列表数据过滤。
     */
    @Schema(description = "hotValue 范围过滤结束值(<=)。可支持范围操作符的列表数据过滤。")
    private Integer hotValueEnd;

    /**
     * group_name / description LIKE搜索字符串。
     * NOTE: 可支持LIKE操作符的列表数据过滤。
     */
    @Schema(description = "LIKE模糊搜索字符串")
    private String searchString;
}
