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

import com.infoepoch.pms.agent.platform.agent.application.AgentFieldService;
import com.infoepoch.pms.agent.platform.agent.application.dto.AgentFieldResponse;
import com.infoepoch.pms.agent.platform.agent.application.dto.CreateAgentFieldRequest;
import com.infoepoch.pms.agent.platform.agent.application.dto.UpdateAgentFieldRequest;
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>
 * 提供指定智能体下的字段增删改查接口。
 * </p>
 */
@RestController
@RequestMapping("/api/admin/agents/{agentId}/fields")
@RequiredArgsConstructor
public class AgentFieldController {

    private final AgentFieldService agentFieldService;

    /**
     * 查询指定智能体的字段列表。
     *
     * @param agentId 智能体 ID
     * @return 字段列表
     */
    @GetMapping
    public Result<List<AgentFieldResponse>> listByAgent(@PathVariable String agentId) {
        return Result.success(agentFieldService.listByAgent(agentId));
    }

    /**
     * 为指定智能体新增字段。
     *
     * @param agentId 智能体 ID
     * @param req     创建请求
     * @return 新增后的字段
     */
    @PostMapping
    public Result<AgentFieldResponse> create(@PathVariable String agentId,
                                             @Valid @RequestBody CreateAgentFieldRequest req) {
        return Result.success(agentFieldService.create(agentId, req));
    }

    /**
     * 更新指定智能体下的字段。
     *
     * @param agentId 智能体 ID
     * @param fieldId 字段 ID
     * @param req     更新请求
     * @return 更新后的字段
     */
    @PutMapping("/{fieldId}")
    public Result<AgentFieldResponse> update(@PathVariable String agentId,
                                             @PathVariable String fieldId,
                                             @Valid @RequestBody UpdateAgentFieldRequest req) {
        return Result.success(agentFieldService.update(agentId, fieldId, req));
    }

    /**
     * 删除指定智能体下的字段。
     *
     * @param agentId 智能体 ID
     * @param fieldId 字段 ID
     * @return 空结果
     */
    @DeleteMapping("/{fieldId}")
    public Result<Void> delete(@PathVariable String agentId, @PathVariable String fieldId) {
        agentFieldService.delete(agentId, fieldId);
        return Result.success(null);
    }
}
