package com.muyu.system.controller;

import com.muyu.common.core.domain.Result;
import com.muyu.common.core.web.controller.BaseController;
import com.muyu.common.core.web.domain.BaseEntity;
import com.muyu.common.system.domain.SysFirm;
import com.muyu.common.system.domain.resp.SysFirmResp;
import com.muyu.system.service.SysFirmDatasourceService;
import com.muyu.system.service.SysFirmService;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * 公司信息控制层
 *
 * @Author WangXin
 * @Data 2024/10/9
 * @Version 1.0.0
 */
@RestController
@RequestMapping("/sysFirm")
@Tag(name = "公司信息控制层")
@Tag(name = "公司信息控制层", description = "主要处理公司数据的 CRUD")
public class SysFirmController extends BaseController<BaseEntity> {

    @Resource
    private SysFirmService sysFirmService;
    @Resource
    private SysFirmDatasourceService sysFirmDatasourceService;

    /**
     * 公司信息列表
     *
     * @return 公司信息列表
     */
    @GetMapping("/list")
    @Schema(name = "公司信息列表", description = "对于公司信息进行列表展示")
    public Result<List<SysFirmResp>> list() {
        return success(sysFirmService.list()
                .stream()
                .map(sysfirm ->SysFirmResp.builder()
                        .firm(sysfirm)
                        .firmDatasource(sysFirmDatasourceService.getById(sysfirm.getDid())))
                .toList()
        );
    }

    @Schema(name = "公司信息下拉框")
    @GetMapping("/firmList")
    public Result<List<SysFirm>> listAll() {
        return success(sysFirmService.list());
    }

    /**
     * 添加公司信息
     * @param sysFirm 公司信息
     * @return  添加公司信息
     */
    @PostMapping("/add")
    @Schema(name = "添加公司信息", description = "添加公司信息")
    public Result<SysFirm> add(@RequestBody SysFirm sysFirm) {
        sysFirmService.save(sysFirm);
        return success(sysFirm);
    }

    /**
     * 修改公司信息
     * @param sysFirm 公司信息
     * @return 修改的数据
     */
    @PutMapping("/update")
    @Schema(name = "修改公司信息", description = "修改公司信息")
    public Result<SysFirm> update(@RequestBody SysFirm sysFirm) {
        sysFirmService.updateById(sysFirm);
        return success(sysFirm);
    }

    /**
     * 修改公司信息
     * @param  id 公司信息 id
     * @return 修改的数据
     */
    @DeleteMapping("/{id}")
    @Schema(name = "修改公司信息", description = "修改公司信息")
    public Result<?> delete(@PathVariable Long id) {
       return success(sysFirmService.removeById(id));
    }



}
