package com.chinaweal.aiccs.outside.api;

import com.chinaweal.aiccs.outside.dto.LangChaoTaskDto;
import com.chinaweal.aiccs.outside.dto.LangChaoTokenDto;
import com.dtflys.forest.annotation.*;
import com.dtflys.forest.http.ForestResponse;

import java.util.List;
import java.util.Map;

/**
 * 浪潮门户
 */
@BaseRequest(
        baseURL = "https://10.207.148.128",
        headers = {"Content-Type:application/json"}
)
public interface LangChaoDoorApi {

    /**
     * 获取token
     *
     * @param code
     * @param grant_type
     * @param client_id
     * @param client_secret
     * @param redirect_uri
     * @return
     * @author ymc
     * @since 2024年9月4日 16:58
     */
    @PostRequest(
            url = "/auth/oauth/token",
            contentType = "application/x-www-form-urlencoded"
    )
    @LogEnabled(logResponseContent = true)
    ForestResponse<LangChaoTokenDto> getToken(@Body("code") String code,
                                              @Body("grant_type") String grant_type,
                                              @Body("client_id") String client_id,
                                              @Body("client_secret") String client_secret,
                                              @Body("redirect_uri") String redirect_uri);

    /**
     * 推送待办任务
     * @author ymc
     * @since 2024年9月5日 9:21
     * @return
     */
    @PostRequest(
            url = "/mrcheck-basic/command/originalTask/insertTaskFromOriginal",
            headers = {
                    "Authorization: Bearer ${accessToken}"
            },
            async = true
    )
    @LogEnabled(logResponseContent = true)
    void insertTaskFromOriginal(@Var("accessToken") String accessToken, @JSONBody Map<String, List<LangChaoTaskDto>> taskList);

    /**
     * 更新待办任务
     *
     * @param accessToken 任务流水号 请求token
     * @param taskSerialNo 任务流水号 作为辨识任务的唯一标识
     * @return
     * @author ymc
     * @since 2024年9月4日 16:42
     */
    @PostRequest(
            url = "/mrcheck-basic/command/checkTask/taskTodoUpdateFinish",
            headers = {
                    "Authorization: Bearer ${accessToken}"
            },
            async = true
    )
    @LogEnabled(logResponseContent = true)
    void taskTodoUpdateFinish(@Var("accessToken") String accessToken, @JSONBody("taskSerialNo") String taskSerialNo);

    /**
     * 获取授权码URL
     *
     * @param clientId     应用唯一标识
     * @param redirectUri  重定向地址(需URL编码)
     * @param responseType 固定值:code
     * @param scope        授权作用域,固定值:trust
     * @param state        客户端状态标识
     * @return 授权码URL
     * @author lwd
     * @since 2024年9月4日 16:58
     */
    @GetRequest(
            url = "/auth/oauth/authorize?client_id={clientId}&redirect_uri={redirectUri}" +
                    "&response_type={responseType}&scope={scope}&state={state}"
    )
    @LogEnabled(logResponseContent = true)
    ForestResponse<String> getAuthorizationUrl(
            @Query("client_id") String clientId,
            @Query("redirect_uri") String redirectUri,
            @Query("response_type") String responseType,
            @Query("scope") String scope,
            @Query("state") String state
    );


    /**
     * 获取全部用户数据
     *
     * @param accessToken 访问令牌
     * @param limit       分页条数
     * @param start       起始条数
     * @return 用户列表响应
     * @author lwd
     * @since 2025年7月9日
     */
    @GetRequest(
            url = "/bsp/api/portal/users/all",
            headers = {
                    "Authorization: Bearer ${accessToken}"
            }
    )
    @LogEnabled(logResponseContent = true)
    ForestResponse<String> getAllUsers(
            @Var("accessToken") String accessToken,
            @Query("limit") String limit,
            @Query("start") String start
    );


    /**
     * 获取Access Token（客户端模式）
     *
     * @return token响应
     * @author lwd
     * @since 2025年7月9日
     */
    @PostRequest(
            url = "/auth/oauth/token",
            contentType = "application/x-www-form-urlencoded",
            headers = {
                    "Authorization: Basic ${base64ClientCredentials}"
            }
    )
    @LogEnabled(logResponseContent = true)
    ForestResponse<LangChaoTokenDto> getClientCredentialsToken(
            @Var("base64ClientCredentials") String base64ClientCredentials,
            @Body("grant_type") String grantType
    );

}
