package com.qqchen.deploy.backend.notification.dto.wework;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Builder;
import lombok.Data;

import java.util.List;

/**
 * 企业微信 Webhook 消息请求体
 * 对应企微官方API格式：https://developer.work.weixin.qq.com/document/path/91770
 *
 * @author qqchen
 * @since 2025-11-13
 */
@Data
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
public class WeworkWebhookRequest {
    
    /**
     * 消息类型：text、markdown、file
     */
    @JsonProperty("msgtype")
    private String msgtype;
    
    /**
     * 文本消息内容
     */
    @JsonProperty("text")
    private TextContent text;
    
    /**
     * Markdown消息内容
     */
    @JsonProperty("markdown")
    private MarkdownContent markdown;
    
    /**
     * 文件消息内容
     */
    @JsonProperty("file")
    private FileContent file;
    
    /**
     * 文本消息内容
     */
    @Data
    @Builder
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class TextContent {
        
        /**
         * 文本内容，最长不超过2048个字节
         */
        @JsonProperty("content")
        private String content;
        
        /**
         * userid的列表，提醒群中的指定成员(@某个成员)，@all表示提醒所有人
         */
        @JsonProperty("mentioned_list")
        private List<String> mentionedList;
        
        /**
         * 手机号列表，提醒手机号对应的群成员(@某个成员)，@all表示提醒所有人
         */
        @JsonProperty("mentioned_mobile_list")
        private List<String> mentionedMobileList;
    }
    
    /**
     * Markdown消息内容
     */
    @Data
    @Builder
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class MarkdownContent {
        
        /**
         * Markdown内容，最长不超过4096个字节
         */
        @JsonProperty("content")
        private String content;
    }
    
    /**
     * 文件消息内容
     */
    @Data
    @Builder
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class FileContent {
        
        /**
         * 文件id，通过文件上传接口获取
         */
        @JsonProperty("media_id")
        private String mediaId;
    }
}
