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

import com.infoepoch.pms.agent.platform.agent.application.AgentService;
import com.infoepoch.pms.agent.platform.agent.application.dto.AgentDetailResponse;
import com.infoepoch.pms.agent.platform.agent.application.dto.AgentSummaryResponse;
import com.infoepoch.pms.agent.platform.agent.application.dto.CreateAgentRequest;
import com.infoepoch.pms.agent.platform.agent.application.dto.UpdateAgentRequest;
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;

/**
 * 智能体管理控制器。
 * <p>
 * 提供智能体的增删改查及启用/禁用接口。
 * GET 列表返回摘要（不含字段），GET 详情返回含字段列表。
 * </p>
 */
@RestController
@RequestMapping("/api/admin/agents")
@RequiredArgsConstructor
public class AgentController {

    private final AgentService agentService;

    /**
     * 查询全部智能体摘要列表。
     *
     * @return 智能体摘要列表
     */
    @GetMapping
    public Result<List<AgentSummaryResponse>> listAll() {
        return Result.success(agentService.listAll());
    }

    /**
     * 创建智能体。
     *
     * @param req 创建请求
     * @return 创建后的智能体摘要
     */
    @PostMapping
    public Result<AgentSummaryResponse> create(@Valid @RequestBody CreateAgentRequest req) {
        return Result.success(agentService.create(req));
    }

    /**
     * 按 ID 查询智能体详情。
     *
     * @param id 智能体 ID
     * @return 智能体详情
     */
    @GetMapping("/{id}")
    public Result<AgentDetailResponse> findById(@PathVariable String id) {
        return Result.success(agentService.findById(id));
    }

    /**
     * 更新智能体基础信息。
     *
     * @param id  智能体 ID
     * @param req 更新请求
     * @return 更新后的智能体摘要
     */
    @PutMapping("/{id}")
    public Result<AgentSummaryResponse> update(@PathVariable String id,
                                               @Valid @RequestBody UpdateAgentRequest req) {
        return Result.success(agentService.update(id, req));
    }

    /**
     * 删除智能体。
     *
     * @param id 智能体 ID
     * @return 空结果
     */
    @DeleteMapping("/{id}")
    public Result<Void> delete(@PathVariable String id) {
        agentService.delete(id);
        return Result.success(null);
    }

    /**
     * 切换智能体启用状态。
     *
     * @param id 智能体 ID
     * @return 切换后的智能体摘要
     */
    @PatchMapping("/{id}/toggle")
    public Result<AgentSummaryResponse> toggle(@PathVariable String id) {
        return Result.success(agentService.toggle(id));
    }
}
