package com.example.demo.controller;

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;
import java.util.Map;

/**
 * 部门管理控制器。
 * 提供部门增删改查和树形结构查询等 RESTful API 接口。
 */
@RestController
@RequestMapping("/api/dept")
@Tag(name = "部门管理", description = "部门增删改查及树形结构接口（IMS-IF-ADMIN）")
public class DeptController {

    private final DeptService deptService;

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

    /**
     * 新增部门。
     *
     * @requirement(name="部门管理", id="SRS-IMS_F-003")
     *
     * @param dept 部门信息
     * @return 创建后的部门
     */
    @PostMapping
    @Operation(summary = "新增部门", description = "创建新部门")
    public Dept createDept(@RequestBody Dept dept) {
        return deptService.createDept(dept);
    }

    /**
     * 编辑部门。
     *
     * @requirement(name="部门管理", id="SRS-IMS_F-003")
     *
     * @param id   部门ID
     * @param dept 更新信息
     * @return 更新后的部门
     */
    @PutMapping("/{id}")
    @Operation(summary = "编辑部门", description = "根据ID更新部门信息")
    public Dept updateDept(@PathVariable Long id, @RequestBody Dept dept) {
        return deptService.updateDept(id, dept);
    }

    /**
     * 删除部门。
     *
     * @requirement(name="部门管理", id="SRS-IMS_F-003")
     *
     * @param id 部门ID
     * @return 操作结果
     */
    @DeleteMapping("/{id}")
    @Operation(summary = "删除部门", description = "根据ID删除部门（含子部门时不可删除）")
    public Map<String, Object> deleteDept(@PathVariable Long id) {
        deptService.deleteDept(id);
        return Map.of("message", "部门删除成功", "deptId", id);
    }

    /**
     * 查询部门树形结构。
     *
     * @requirement(name="部门管理", id="SRS-IMS_F-003")
     *
     * @return 部门树形列表
     */
    @GetMapping
    @Operation(summary = "查询部门树形结构", description = "以树形结构返回所有部门数据")
    public List<Dept> getDeptTree() {
        return deptService.getDeptTree();
    }

    /**
     * 根据ID查询部门详情。
     *
     * @requirement(name="部门管理", id="SRS-IMS_F-003")
     *
     * @param id 部门ID
     * @return 部门详情
     */
    @GetMapping("/{id}")
    @Operation(summary = "查询部门详情", description = "根据ID获取部门详细信息")
    public Dept getDept(@PathVariable Long id) {
        return deptService.getDept(id);
    }
}
