package com.yeejoin.amos.boot.module.jcs.biz.controller;

import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.module.common.api.dto.ExcelDto;
import com.yeejoin.amos.boot.module.jcs.api.enums.ExcelEnums;
import com.yeejoin.amos.boot.module.jcs.biz.service.impl.DataSourcesImpl;
import com.yeejoin.amos.boot.module.jcs.biz.service.impl.ExcelServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;

import javax.servlet.http.HttpServletResponse;
import java.util.Map;

/**
 * 导出导入
 *
 * @author system_generator
 * @date 2021-06-29
 */
@RestController
@Api(tags = "导出")
@RequestMapping(value = "/excel")
public class ExcelController extends BaseController {

    @Autowired
    ExcelServiceImpl excelService;

    @Autowired
    DataSourcesImpl dataSources;

    private static final String NOT_DUTY = "休班";



    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "下载模板")
    @GetMapping("/download/template/{type}")
    public void downloadTemplate(HttpServletResponse response, @PathVariable(value = "type")  String type) {
        try {
            ExcelEnums excelEnums=  ExcelEnums.getByKey(type);
            ExcelDto excelDto = new ExcelDto(excelEnums.getFileName(), excelEnums.getSheetName(), excelEnums.getClassUrl(), excelEnums.getType());
            excelService.templateExport(response, excelDto);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("系统异常！");
        }
    }
    /**
     * * @param Map par  可以传递过滤条件，传入具体实现类中
     * @return 
     * <PRE>
     * author tw
     * date 2021/9/13
     * </PRE>
     */
    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "导出公用类")
    @GetMapping("/export/{type}")
    public void getFireStationFile(HttpServletResponse response, @PathVariable(value = "type")  String type , @RequestParam Map par) {
        try {
            ExcelEnums excelEnums=  ExcelEnums.getByKey(type);
            ExcelDto excelDto = new ExcelDto(excelEnums.getFileName(), excelEnums.getSheetName(), excelEnums.getClassUrl(), excelEnums.getType());
            excelService.commonExport(response, excelDto,par);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("系统异常！");
        }
    }



    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "导入公用")
    @PostMapping("/upload/{type}")
    public ResponseModel<Object> upload(@RequestPart("file") MultipartFile multipartFile, @PathVariable(value = "type")  String type) {
        try {
            ExcelEnums excelEnums=  ExcelEnums.getByKey(type);
            ExcelDto excelDto = new ExcelDto(excelEnums.getFileName(), excelEnums.getSheetName(), excelEnums.getClassUrl(), excelEnums.getType());
            excelService.commonUpload(multipartFile, excelDto);
            return ResponseHelper.buildResponse(null);
        } catch (RuntimeException e) {
            e.printStackTrace();
            throw new BadRequest("文件格式不正确或excel 模板不匹配");  // BUG 2821 by litw 2021年9月16日
        }catch (Exception e){
            throw new BadRequest("文件格式不正确或excel 模板不匹配！");
        }


    }





//    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
//    @ApiOperation(value = "上传文件数据-2")
//    @PostMapping("/upload2")
//    public void upload2(@RequestPart("file") MultipartFile multipartFile,
//                        @RequestParam(required = false) String fileName,
//                        @RequestParam(required = false) String sheetName,
//                        @RequestParam String type) {
//        try {
//            excelService.commonUpload(multipartFile, new ExcelDto(fileName, sheetName, type));
//        } catch (Exception e) {
//            e.printStackTrace();
//            throw new RuntimeException("系统异常！");
//        }
//    }
//    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
//    @ApiOperation(value = "导出公用类2")
//    @GetMapping("/export/list")
//    public void exportByType(HttpServletResponse response, @RequestParam(required = false) String fileName,
//                             @RequestParam(required = false) String sheetName, @RequestParam String type) {
//        try {
//            excelService.commonExport(response, new ExcelDto(fileName, sheetName, type));
//        } catch (Exception e) {
//            e.printStackTrace();
//            throw new RuntimeException("系统异常！");
//        }
//    }
    /**
     * 导出值班模板
     *
     * @param response
     * @param beginDate 值班开始日期
     * @param endDate   值班结束日期
     * @param excelDto  导出类型参数
     * @param ids       部门或队伍的id列表，逗号分隔
     */
    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "导出值班模板", notes = "导出值班模板")
    @GetMapping(value = "/duty_template")
    public void dutyCarTemplate(HttpServletResponse response, @RequestParam("beginDate") String beginDate,
                                @RequestParam("endDate") String endDate, ExcelDto excelDto,
                                @RequestParam("ids") String ids) {
        try {
            excelService.dutyTemplateExport(response, beginDate, endDate, excelDto, ids);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("系统异常！");
        }
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "导出值班信息", notes = "导出值班模板")
    @GetMapping(value = "/duty_info")
    public void dutyCarDuty(HttpServletResponse response, @RequestParam("beginDate") String beginDate,
                            @RequestParam("endDate") String endDate, ExcelDto excelDto) {
        try {
            excelService.dutyInfoExport(response, beginDate, endDate, excelDto);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("系统异常！");
        }
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "导出公用类带过滤参数")
    @PostMapping("/exportByParams/{type}")
    public void getFireStationFileByParams(HttpServletResponse response, @PathVariable(value = "type") String type,
                                           @RequestParam(value = "params") String params) {
        try {
            ExcelEnums excelEnums=  ExcelEnums.getByKey(type);
            ExcelDto excelDto = new ExcelDto(excelEnums.getFileName(), excelEnums.getSheetName(), excelEnums.getClassUrl(), excelEnums.getType());
            excelService.exportByParams(response, excelDto, params);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("系统异常！");
        }
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "导出给提供设备接口")
    @GetMapping(value = "/exportForEquipment")
    public  ResponseModel<String[]> getFireStationFileByParams( String type,
                                          String method) {
        try {
            return ResponseHelper.buildResponse(dataSources.selectList(type,method));
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("系统异常！");
        }
    }
}
