package com.njcn.rdms.module.system.api.websocket;

import com.njcn.rdms.framework.common.pojo.CommonResult;
import com.njcn.rdms.framework.common.util.json.JsonUtils;
import com.njcn.rdms.module.system.api.websocket.dto.WebSocketSendToUsersReqDTO;
import com.njcn.rdms.module.system.enums.ApiConstants;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.Collection;

@FeignClient(name = ApiConstants.NAME) 
@Tag(name = "RPC 服务 - WebSocket 发送器的") // 对 WebSocketMessageSender 进行封装，提供给其它模块使用
public interface WebSocketSenderApi {

    String PREFIX = ApiConstants.PREFIX + "/websocket";

    @PostMapping(PREFIX + "/send-to-users")
    @Operation(summary = "按用户编号集合发送 WebSocket 消息")
    CommonResult<Boolean> sendToUsers(@Valid @RequestBody WebSocketSendToUsersReqDTO message);

    /**
     * 发送消息给指定用户集合
     *
     * @param userIds 用户编号集合
     * @param messageType 消息类型
     * @param messageContent 消息内容，JSON 格式
     */
    default void send(Collection<Long> userIds, String messageType, String messageContent) {
        sendToUsers(new WebSocketSendToUsersReqDTO().setUserIds(userIds)
                .setMessageType(messageType).setMessageContent(messageContent)).checkError();
    }

    default void sendObject(Collection<Long> userIds, String messageType, Object messageContent) {
        send(userIds, messageType, JsonUtils.toJsonString(messageContent));
    }

}
