package com.xinelu.manage.controller.batchsendtaskinfo;

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.enums.BusinessType;
import com.xinelu.common.utils.poi.ExcelUtil;
import com.xinelu.manage.domain.batchsendtaskinfo.BatchSendTaskInfo;
import com.xinelu.manage.dto.batchsendtaskinfo.BatchSendTaskDto;
import com.xinelu.manage.dto.batchsendtaskrecordinfo.BatchSendTaskRecordDto;
import com.xinelu.manage.service.batchsendtaskinfo.IBatchSendTaskInfoService;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.security.access.prepost.PreAuthorize;
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 zh
 * @date 2026-04-26
 */
@RestController
@RequestMapping("/system/batchSendTaskInfo")
public class BatchSendTaskInfoController extends BaseController {
    @Resource
    private IBatchSendTaskInfoService batchSendTaskInfoService;

    /**
     * 查询批量推送任务信息列表
     */
    @PreAuthorize("@ss.hasPermi('system:batchSendTaskInfo:list')")
    @GetMapping("/list")
    public TableDataInfo list(BatchSendTaskDto batchSendTaskInfo) {
        startPage();
        List<BatchSendTaskInfo> list = batchSendTaskInfoService.selectBatchSendTaskInfoList(batchSendTaskInfo);
        return getDataTable(list);
    }

    /**
     * 查询批量推送任务信息列表
     */
    @GetMapping("/batchSendTaskList")
    public List<BatchSendTaskInfo> batchSendTaskList(BatchSendTaskDto batchSendTaskInfo) {
        return batchSendTaskInfoService.selectBatchSendTaskInfoList(batchSendTaskInfo);
    }

    /**
     * 导出批量推送任务信息列表
     */
    @PreAuthorize("@ss.hasPermi('system:batchSendTaskInfo:export')")
    @Log(title = "批量推送任务信息", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, BatchSendTaskDto batchSendTaskInfo) {
        List<BatchSendTaskInfo> list = batchSendTaskInfoService.selectBatchSendTaskInfoList(batchSendTaskInfo);
        ExcelUtil<BatchSendTaskInfo> util = new ExcelUtil<>(BatchSendTaskInfo.class);
        util.exportExcel(response, list, "批量推送任务信息数据");
    }

    /**
     * 获取批量推送任务信息详细信息
     */
    @PreAuthorize("@ss.hasPermi('system:batchSendTaskInfo:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id) {
        return AjaxResult.success(batchSendTaskInfoService.selectBatchSendTaskInfoById(id));
    }

    /**
     * 新增批量推送任务信息
     */
    @PreAuthorize("@ss.hasPermi('system:batchSendTaskInfo:add')")
    @Log(title = "批量推送任务信息", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody BatchSendTaskInfo batchSendTaskInfo) {
        return toAjax(batchSendTaskInfoService.insertBatchSendTaskInfo(batchSendTaskInfo));
    }

    /**
     * 修改批量推送任务信息
     */
    @PreAuthorize("@ss.hasPermi('system:batchSendTaskInfo:edit')")
    @Log(title = "批量推送任务信息", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody BatchSendTaskInfo batchSendTaskInfo) {
        return toAjax(batchSendTaskInfoService.updateBatchSendTaskInfo(batchSendTaskInfo));
    }

    /**
     * 删除批量推送任务信息
     */
    @PreAuthorize("@ss.hasPermi('system:batchSendTaskInfo:remove')")
    @Log(title = "批量推送任务信息", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids) {
        return toAjax(batchSendTaskInfoService.deleteBatchSendTaskInfoByIds(ids));
    }

    @ApiOperation("批量推送任务信息导入")
    @PostMapping("/batchSendTaskUpload")
    public AjaxResult batchSendTaskUpload(MultipartFile file, Integer isDistinct, String importName) throws Exception {
        //判断excel里面是否有数据/文件格式
        if (Objects.isNull(file) || StringUtils.isBlank(file.getOriginalFilename())) {
            return AjaxResult.error("请选择需要导入的文件！");
        }
        // 获取文件名
        String filename = file.getOriginalFilename();
        if (!filename.endsWith(Constants.XLSX) && !filename.endsWith(Constants.XLS)) {
            return AjaxResult.error("导入文件格式不正确，请导入xlsx或xls格式的文件！");
        }
        ExcelUtil<BatchSendTaskInfo> util = new ExcelUtil<>(BatchSendTaskInfo.class);
        List<BatchSendTaskInfo> list = util.importExcel(file.getInputStream());
        return batchSendTaskInfoService.batchSendTaskUpload(list, isDistinct, filename, importName);
    }

    @ApiOperation("创建批量推送任务")
    @PostMapping("/batchSend")
    public AjaxResult batchSend(@RequestBody BatchSendTaskRecordDto batchSendTaskRecordDto) throws Exception {
        return batchSendTaskInfoService.batchSend(batchSendTaskRecordDto);
    }

    @ApiOperation("标签信息")
    @GetMapping("/getPhysicalExaminationLabel")
    public List<String> getPhysicalExaminationLabel(){
        return batchSendTaskInfoService.getPhysicalExaminationLabel();
    }
}