package com.ruoyi.web.controller.jarvis;

import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.jarvis.service.IInstructionService;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * 指令执行控制器：将 jd/JDUtil 的指令处理迁移为 HTTP 接口
 */
@RestController
@RequestMapping("/jarvis/instruction")
public class InstructionController extends BaseController {

    private final IInstructionService instructionService;

    public InstructionController(IInstructionService instructionService) {
        this.instructionService = instructionService;
    }

    /**
     * 执行文本指令（控制台入口，需要权限）
     * body: { command: "京今日统计", forceGenerate: false }
     */
    @PostMapping("/execute")
    public AjaxResult execute(@RequestBody Map<String, Object> body) {
        String cmd = body != null ? (body.get("command") != null ? String.valueOf(body.get("command")) : null) : null;
        boolean forceGenerate = body != null && body.get("forceGenerate") != null && Boolean.parseBoolean(String.valueOf(body.get("forceGenerate")));
        // 控制台入口：全量统计视角（排除后台标记不参与统计的联盟），非单个企微成员
        java.util.List<String> result = instructionService.execute(cmd, forceGenerate, true, null);
        return AjaxResult.success(result);
    }
    
    /**
     * 获取历史消息记录（支持关键词搜索，在全部历史数据中匹配）
     * @param type 消息类型：request(请求) 或 response(响应)
     * @param limit 获取数量，默认100条；有 keyword 时为返回匹配条数上限，默认200
     * @param keyword 可选，搜索关键词；不为空时在全部数据中过滤后返回
     * @return 历史消息列表
     */
    @GetMapping("/history")
    public AjaxResult getHistory(@RequestParam(required = false, defaultValue = "request") String type,
                                  @RequestParam(required = false, defaultValue = "100") Integer limit,
                                  @RequestParam(required = false) String keyword) {
        java.util.List<String> history = instructionService.getHistory(type, limit, keyword);
        return AjaxResult.success(history);
    }
}


