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 TourImMemberDto {

    /**
     * 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不能为空！", groups = {UpdateGroup.class})
    private Long groupId;

    /**
     * 成员角色 1群主 2管理员 3普通成员。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "成员角色 1群主 2管理员 3普通成员。可支持等于操作符的列表数据过滤。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "数据验证失败，成员角色 1群主 2管理员 3普通成员不能为空！")
    private Integer groupRole;

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

    /**
     * 会话是否显示(每个群在聊天列表要不要展示) 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 isShow;

    /**
     * 单聊情况下对方的id。
     */
    @Schema(description = "单聊情况下对方的id。")
    private Long partnerId;

    /**
     * 会话是否置顶 (每个群在聊天列表要不要置顶)  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 isTop;

    /**
     * 会话是否开启免打扰 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 isNotDisturb;

    /**
     * 自己在群里的昵称。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "自己在群里的昵称。可支持等于操作符的列表数据过滤。")
    private String groupNickname;

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

    /**
     * 聊天背景。
     */
    @Schema(description = "聊天背景。")
    private String groupBackImage;

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