package com.diagbot.web;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.diagbot.annotation.SysLogger;
import com.diagbot.dto.GetModuleDetailInfoDTO;
import com.diagbot.dto.GetModuleInfoOneDTO;
import com.diagbot.dto.GetQuestionInfoDTO;
import com.diagbot.dto.ModuleInfoDTO;
import com.diagbot.dto.ModuleInfoListDTO;
import com.diagbot.dto.RespDTO;
import com.diagbot.facade.ModuleInfoFacade;
import com.diagbot.vo.AddModuleInfoVO;
import com.diagbot.vo.DeleteModuleVO;
import com.diagbot.vo.GetModuleDetailInfoVO;
import com.diagbot.vo.GetModuleInfoOneVO;
import com.diagbot.vo.GetModuleInfoVO;
import com.diagbot.vo.ModuleGetQuestionInfoVO;
import com.diagbot.vo.UpdateModuleInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import java.util.List;

/**
 * <p>
 * 模型表 前端控制器
 * </p>
 *
 * @author zhoutg
 * @since 2018-12-05
 */
@RestController
@RequestMapping("/moduleInfo")
@SuppressWarnings("unchecked")
@Api(value = "主诉-既往史模板相关API", tags = { "主诉-既往史模板相关API" })
public class ModuleInfoController {


    @Autowired
    ModuleInfoFacade moduleInfoFacade;

    @ApiOperation(value = "模板新增[by:wangyu]",
            notes = "name: 模板名称，必填<br>" +
                    "type: 模板类型，必填<br>" +
                    "questionId: 标签id，不是标点符号时需要填写<br>" +
                    "flag: 特殊标示类型<br>" +
                    "relationModule: 关联模板id<br>" +
                    "text: 特殊标签（如逗号句号）<br>" +
                    "textType: 特殊标签归属类型")
    @PostMapping("/saveModuleInfo")
    @SysLogger("saveModuleInfo")
    @Transactional
    public RespDTO<Boolean> saveModuleInfo(@Valid @RequestBody AddModuleInfoVO addModuleInfoVO) {
        Boolean data = moduleInfoFacade.saveModuleInfo(addModuleInfoVO);
        return RespDTO.onSuc(data);
    }

    @ApiOperation(value = "模板修改[by:wangyu]",
            notes = "id: 模板id，必填<br>" +
                    "name: 模板名称，必填<br>" +
                    "type: 模板类型，必填<br>" +
                    "questionId: 标签id，必填<br>" +
                    "flag: 特殊标示类型<br>" +
                    "relationModule: 关联模板id")
    @PostMapping("/updateModuleInfo")
    @SysLogger("updateModuleInfo")
    @Transactional
    public RespDTO<Boolean> updateModuleInfo(@Valid @RequestBody UpdateModuleInfoVO updateModuleInfoVO) {
        Boolean data = moduleInfoFacade.updateModuleInfo(updateModuleInfoVO);
        return RespDTO.onSuc(data);
    }

    @ApiOperation(value = "模板删除[by:zhoutg]",
            notes = "")
    @PostMapping("/delete")
    @SysLogger("delete")
    @Transactional
    public RespDTO<Boolean> delete(@RequestBody DeleteModuleVO deleteModuleVO) {
        moduleInfoFacade.deleteByIdsFac(deleteModuleVO.getIds());
        return RespDTO.onSuc(true);
    }

    @ApiOperation(value = "获取标签池信息[by:wangyu]",
            notes = "tagName: 标签名<br>" +
                    "moduleId: 模板id，添加时不用填，修改时必填<br>" +
                    "type: 标签归属类型，必填")
    @PostMapping("/getQuestionInfos")
    @SysLogger("getQuestionInfos")
    public RespDTO<List<GetQuestionInfoDTO>> getQuestionInfos(@Valid @RequestBody ModuleGetQuestionInfoVO moduleGetQuestionInfoVO) {
        List<GetQuestionInfoDTO> date = moduleInfoFacade.getQuestionInfos(moduleGetQuestionInfoVO);
        return RespDTO.onSuc(date);
    }

    @ApiOperation(value = "获取模板信息(作为子模板使用时传入type)[by:wangyu]",
            notes = "type: 模板类型,1：主诉模板 2：现病史模板 3：现病史空模板 4 : 其他史模板 5：嵌套模板 6：慢病模板<br>" +
                    "<br>")
    @PostMapping("/getModuleInfo")
    @SysLogger("getModuleInfo")
    public RespDTO<List<ModuleInfoDTO>> getModuleInfo(@Valid @RequestBody GetModuleInfoVO getModuleInfoVO) {
        List<ModuleInfoDTO> date = moduleInfoFacade.getModuleInfo(getModuleInfoVO);
        return RespDTO.onSuc(date);
    }

    @ApiOperation(value = "获取模板列表（主页面查询）[by:wangyu]",
            notes = "type: 模板类型,1：主诉模板 2：现病史模板 3：现病史空模板 4 : 其他史模板 5：嵌套模板 6：慢病模板<br>" +
                    "<br>")
    @PostMapping("/getModuleInfoList")
    @SysLogger("getModuleInfoList")
    public RespDTO<IPage<ModuleInfoListDTO>> getModuleInfoList(@Valid @RequestBody GetModuleInfoVO getModuleInfoVO) {
        IPage<ModuleInfoListDTO> date = moduleInfoFacade.getModuleInfoList(getModuleInfoVO);
        return RespDTO.onSuc(date);
    }

    @ApiOperation(value = "获取模板明细信息——修改时获取已添加过的标签[by:wangyu]",
            notes = "moduleId: 模板id<br>" +
                    "<br>")
    @PostMapping("/getModuleDetailInfo")
    @SysLogger("getModuleDetailInfo")
    public RespDTO<List<GetModuleDetailInfoDTO>> getModuleDetailInfo(@Valid @RequestBody GetModuleDetailInfoVO getModuleDetailInfoVO) {
        List<GetModuleDetailInfoDTO> date= moduleInfoFacade.getModuleDetailInfo(getModuleDetailInfoVO);
        return RespDTO.onSuc(date);
    }

    @ApiOperation(value = "获取单个模板信息(修改用)[by:wangyu]",
            notes = "" +
                    "moduleId: 模板id<br>")
    @PostMapping("/getModuleInfoOne")
    @SysLogger("getModuleInfoOne")
    public RespDTO<GetModuleInfoOneDTO> getModuleInfoOne(@Valid @RequestBody GetModuleInfoOneVO getModuleInfoVO) {
        GetModuleInfoOneDTO date = moduleInfoFacade.getModuleInfoOne(getModuleInfoVO);
        return RespDTO.onSuc(date);
    }

}
