package com.example.demo.controller;

import com.example.demo.model.ApiResult;
import com.example.demo.model.Dept;
import com.example.demo.service.DeptService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 部门管理控制器。
 * <p>提供部门新增、编辑、删除、查询及树形层级结构接口。</p>
 */
@RestController
@RequestMapping("/api/dept")
@Tag(name = "部门管理", description = "部门管理模块接口（需求标识：SRS-F-01-003）")
public class DeptController {

    private final DeptService deptService;

    public DeptController(DeptService deptService) {
        this.deptService = deptService;
    }

    /**
     * 新增部门。
     *
     * @requirement(name="部门管理", id="SRS-F-01-003")
     */
    @PostMapping("/add")
    @Operation(summary = "新增部门", description = "创建新的部门")
    public ApiResult<Dept> add(@RequestBody Dept dept) {
        return ApiResult.success(deptService.addDept(dept));
    }

    /**
     * 编辑部门。
     *
     * @requirement(name="部门管理", id="SRS-F-01-003")
     */
    @PutMapping("/edit")
    @Operation(summary = "编辑部门", description = "修改已有部门信息")
    public ApiResult<Dept> edit(@RequestBody Dept dept) {
        return ApiResult.success(deptService.editDept(dept));
    }

    /**
     * 删除部门。
     *
     * @requirement(name="部门管理", id="SRS-F-01-003")
     */
    @DeleteMapping("/delete/{id}")
    @Operation(summary = "删除部门", description = "根据ID删除部门")
    public ApiResult<Void> delete(@PathVariable Long id) {
        deptService.deleteDept(id);
        return ApiResult.success();
    }

    /**
     * 查询部门树。
     *
     * @requirement(name="部门管理", id="SRS-F-01-003")
     */
    @GetMapping("/tree")
    @Operation(summary = "查询部门树", description = "返回树形结构的部门列表")
    public ApiResult<List<Dept>> tree() {
        return ApiResult.success(deptService.treeDepts());
    }
}
