package com.xinelu.manage.controller.poserInfo;

import com.xinelu.common.annotation.Log;
import com.xinelu.common.constant.Constants;
import com.xinelu.common.core.controller.BaseController;
import com.xinelu.common.core.domain.AjaxResult;
import com.xinelu.common.core.page.TableDataInfo;
import com.xinelu.common.custominterface.Insert;
import com.xinelu.common.custominterface.Update;
import com.xinelu.common.enums.BusinessType;
import com.xinelu.common.utils.poi.ExcelUtil;
import com.xinelu.manage.dto.poserInfo.PoserInfoDTO;
import com.xinelu.manage.service.poserInfo.IPoserInfoService;
import com.xinelu.manage.vo.poserInfo.PoserInfoVO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Objects;

/**
 * 泉医到家系统海报模块信息（包含咨询简介信息）Controller
 *
 * @author xinyilu
 * @date 2023-02-10
 */
@RestController
@RequestMapping("/system/poser")
public class PoserInfoController extends BaseController {
    @Resource
    private IPoserInfoService poserInfoService;

    /**
     * 查询泉医到家系统海报模块信息（包含咨询简介信息）列表
     */
    @PreAuthorize("@ss.hasPermi('system:poser:list')")
    @GetMapping("/list")
    public TableDataInfo list(PoserInfoVO poserInfo) {
        startPage();
        List<PoserInfoVO> list = poserInfoService.selectPoserInfoList(poserInfo);
        return getDataTable(list);
    }

    /**
     * 导出泉医到家系统海报模块信息（包含咨询简介信息）列表
     */
    @PreAuthorize("@ss.hasPermi('system:poser:export')")
    @Log(title = "泉医到家系统海报模块信息（包含咨询简介信息）", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, PoserInfoVO poserInfo) {
        List<PoserInfoVO> list = poserInfoService.selectPoserInfoList(poserInfo);
        ExcelUtil<PoserInfoVO> util = new ExcelUtil<>(PoserInfoVO.class);
        util.exportExcel(response, list, "泉医到家系统海报模块信息（包含咨询简介信息）数据");
    }

    /**
     * 获取泉医到家系统海报模块信息（包含咨询简介信息）详细信息
     */
    @PreAuthorize("@ss.hasPermi('system:poser:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id) {
        return AjaxResult.success(poserInfoService.selectPoserInfoById(id));
    }

    /**
     * 新增泉医到家系统海报模块信息（包含咨询简介信息）
     */
    @PreAuthorize("@ss.hasPermi('system:poser:add')")
    @Log(title = "泉医到家系统海报模块信息（包含咨询简介信息）", businessType = BusinessType.INSERT)
    @PostMapping("/add")
    public AjaxResult add(@Validated(Insert.class) @RequestBody PoserInfoDTO poserInfo) {
        return poserInfoService.insertPoserInfo(poserInfo);
    }

    /**
     * 修改泉医到家系统海报模块信息（包含咨询简介信息）
     */
    @PreAuthorize("@ss.hasPermi('system:poser:edit')")
    @Log(title = "泉医到家系统海报模块信息（包含咨询简介信息）", businessType = BusinessType.UPDATE)
    @PostMapping("/edit")
    public AjaxResult edit(@Validated(Update.class) @RequestBody PoserInfoDTO poserInfo) {
        return poserInfoService.updatePoserInfo(poserInfo);
    }

    /**
     * 删除泉医到家系统海报模块信息（包含咨询简介信息）
     */
    @Log(title = "泉医到家系统海报模块信息（包含咨询简介信息）", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids) {
        return toAjax(poserInfoService.deletePoserInfoByIds(ids));
    }

    /**
     * 根据moduleType 护理站id 与 护理项目id 删除泉医到家系统海报模块信息（包含咨询简介信息）
     */
    @PreAuthorize("@ss.hasPermi('system:poser:remove')")
    @Log(title = "泉医到家系统海报模块信息（包含咨询简介信息）", businessType = BusinessType.DELETE)
    @DeleteMapping("/deletePoserInfo")
    public AjaxResult removeModuleType(PoserInfoVO poserInfo) {
        if (StringUtils.isBlank(poserInfo.getModuleType())) {
            return AjaxResult.error("海报模块类型不能为空！");
        }
        return poserInfoService.deletePoserInfoByModuleType(poserInfo);
    }


    /**
     * 海报视频上传
     */
    @PostMapping("/updatePoserHeads")
    public AjaxResult updatePoserHeads(@RequestParam("file") MultipartFile multipartFile, @RequestParam(value = "type") String type) throws Exception {
        if (Objects.isNull(multipartFile) || StringUtils.isBlank(multipartFile.getOriginalFilename())) {
            return AjaxResult.error("当前文件不存在，无法上传！");
        }
        if (multipartFile.getOriginalFilename().contains(Constants.EMPTY)) {
            return AjaxResult.error("当前文件名含有空格，请先去除空格在上传！");
        }
        if (StringUtils.isBlank(type)) {
            return AjaxResult.error("请选择所要上传的路径类型！");
        }
        return poserInfoService.updatePoserHeads(multipartFile, type);
    }


    /**
     * 根据ModuleType获取泉医到家系统海报模块信息（包含咨询简介信息）详细信息
     */
    @GetMapping(value = "/getModuleType")
    public AjaxResult getModuleType(PoserInfoVO poserInfo) {
        if (StringUtils.isBlank(poserInfo.getModuleType())) {
            return AjaxResult.error("海报模块标识不能为空！");
        }
        return poserInfoService.selectPoserInfoByModuleType(poserInfo);
    }

    /**
     * 从字典表中查询海报跳转链接
     */
    @GetMapping(value = "/selectPosterImageJump")
    public AjaxResult selectPosterImageJump(String dictType) {
        return poserInfoService.selectPosterImageJump(dictType);
    }
}
