package com.infoepoch.pms.agent.platform.chatbot.adapter.in.web;

import com.infoepoch.pms.agent.platform.chatbot.application.ChatbotService;
import com.infoepoch.pms.agent.platform.chatbot.application.ChatbotToolQueryService;
import com.infoepoch.pms.agent.platform.chatbot.application.dto.*;
import com.infoepoch.pms.agent.platform.shared.response.Result;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 聊天机器人管理控制器。
 */
@RestController
@RequestMapping("/api/admin/chatbots")
@RequiredArgsConstructor
public class ChatbotController {

    private final ChatbotService chatbotService;
    private final ChatbotToolQueryService chatbotToolQueryService;

    /**
     * 查询所有聊天机器人。
     *
     * @return 聊天机器人摘要响应列表
     */
    @GetMapping
    public Result<List<ChatbotSummaryResponse>> listAll() {
        return Result.success(chatbotService.listAll());
    }

    /**
     * 查询聊天机器人可配置工具选项。
     *
     * @return 工具选项响应列表
     */
    @GetMapping("/tools")
    public Result<List<ChatbotToolOptionResponse>> listToolOptions() {
        return Result.success(chatbotToolQueryService.listConfigurableToolOptions());
    }

    /**
     * 创建聊天机器人。
     *
     * @param req 创建请求 DTO
     * @return 聊天机器人摘要响应
     */
    @PostMapping
    public Result<ChatbotSummaryResponse> create(@Valid @RequestBody CreateChatbotRequest req) {
        return Result.success(chatbotService.create(req));
    }

    /**
     * 按 ID 查询聊天机器人详情。
     *
     * @param id 聊天机器人主键
     * @return 聊天机器人详情响应
     */
    @GetMapping("/{id}")
    public Result<ChatbotDetailResponse> findById(@PathVariable String id) {
        return Result.success(chatbotService.findById(id));
    }

    /**
     * 更新聊天机器人。
     *
     * @param id 聊天机器人主键
     * @param req 更新请求 DTO
     * @return 聊天机器人摘要响应
     */
    @PutMapping("/{id}")
    public Result<ChatbotSummaryResponse> update(@PathVariable String id,
                                                 @Valid @RequestBody UpdateChatbotRequest req) {
        return Result.success(chatbotService.update(id, req));
    }

    /**
     * 删除聊天机器人。
     *
     * @param id 聊天机器人主键
     * @return 空响应
     */
    @DeleteMapping("/{id}")
    public Result<Void> delete(@PathVariable String id) {
        chatbotService.delete(id);
        return Result.success(null);
    }

    /**
     * 切换聊天机器人启用状态。
     *
     * @param id 聊天机器人主键
     * @return 聊天机器人摘要响应
     */
    @PatchMapping("/{id}/toggle")
    public Result<ChatbotSummaryResponse> toggle(@PathVariable String id) {
        return Result.success(chatbotService.toggle(id));
    }
}
