package cn.timer.api.controller.insure;

import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

import cn.timer.api.bean.insure.InsurePolicy;
import cn.timer.api.bean.insure.InsureUser;
import cn.timer.api.config.annotation.CurrentUser;
import cn.timer.api.config.annotation.UserBean;
import cn.timer.api.dao.insure.InsureUserMapper;
import cn.timer.api.dto.insure.InsureDto;
import cn.timer.api.dto.insure.InsureUserDto;
import cn.timer.api.dto.insure.PolicyDto;
import cn.timer.api.utils.ExcelUtils;
import cn.timer.api.utils.Page;
import cn.timer.api.utils.Result;
import cn.timer.api.utils.ResultUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.common.utils.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.beust.jcommander.internal.Lists;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.google.common.collect.Maps;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;


/**
 * 被保人
 *
 * @author wgd
 * @email 862422848@qq.com
 * @date 2022-03-11 09:06:53
 */
@Api(tags = "8.0保险列表")
@RestController
@Transactional
@RequestMapping(value ="/insureUser", produces = {"application/json"})
public class InsureUserController{
    @Autowired
    private InsureUserMapper insureUserMapper;

    @PostMapping(value = "/policyList")
    @ApiOperation(value = "3.保单列表--运营后台", httpMethod = "POST", notes = "保单列表")
    public Result<Object> policyList(@RequestBody PolicyDto policyDto) {
        Map map = Maps.newHashMap();
        List<PolicyDto> list = insureUserMapper.selectPolicyList(policyDto);
        map.put("list", Optional.ofNullable(list).orElse(Lists.newArrayList()));
        map.put("total", insureUserMapper.totalUser(policyDto));
        return ResultUtil.data(map);
    }
    @GetMapping(value = "/userDetial")
    @ApiOperation(value = "被保人详情", httpMethod = "POST", notes = "保单列表")
    public Result<Object> userDetial(@RequestParam("userId") String userId) {
        InsureUser user = InsureUser.builder().id(Integer.parseInt(userId)).build().selectById();
        return ResultUtil.data(user);
    }

    @PostMapping(value = "/userPolicyList")
    @ApiOperation(value = "3.保单列表--8小时端", httpMethod = "POST", notes = "保单列表")
    public Result<Object> userPolicyList(@CurrentUser UserBean userBean, @RequestBody PolicyDto policyDto) {
        Map map = Maps.newHashMap();
        if(!StringUtils.isNullOrEmpty(policyDto.getCreateTime())){
            List arr= JSONObject.parseArray(policyDto.getCreateTime(), String.class);
            policyDto.setPolicyDateStart(arr.get(0).toString());
            policyDto.setPolicyDateEnd(arr.get(1).toString());
        }
        policyDto.setOrgCode(String.valueOf(userBean.getOrgCode()));
        List<PolicyDto> list = insureUserMapper.selectPolicyList(policyDto);
        map.put("list", Optional.ofNullable(list).orElse(Lists.newArrayList()));
        map.put("total", insureUserMapper.totalUser(policyDto));
        return ResultUtil.data(map);
    }
    @PostMapping(value = "/getPolicyUserList")
    @ApiOperation(value = "获取选中用户方案信息", httpMethod = "POST", notes = "获取选中用户方案信息")
    public Result<Object> getPolicyUserList(@RequestBody InsureDto dto){
        List<InsureUserDto> userList= insureUserMapper.selectPlansListByIds(dto.getOldIds());
        if(userList.size()<=0){
            return ResultUtil.error("用户方案错误");
        }
        return ResultUtil.data(userList);
    }
    @GetMapping(value = "/getPolicyPlansList")
    @ApiOperation(value = "获取方案列表", httpMethod = "GET", notes = "获取选中用户方案信息")
    public Result<Object> getPolicyUserList(@RequestParam("policyId") String policyId){
        List<InsureUserDto> userList= insureUserMapper.selectPlansListById(policyId);
        if(userList.size()<=0){
            return ResultUtil.error("用户方案错误");
        }
        return ResultUtil.data(userList);
    }

    @PostMapping(value = "/exportUserList")
    @ApiOperation(value = "导出列表", httpMethod = "GET", notes = "导出列表")
    public void exportUserList(@RequestParam("policyId") String policyId,
                                         @RequestParam("status") String status,
                                         @RequestParam("name") String name,
                                         @RequestParam("policyDateStart") String policyDateStart,
                                         @RequestParam("planId") String planId,
                                         @RequestParam("categoryId") String categoryId){
        PolicyDto policyDto = new PolicyDto();
        policyDto.setId(Integer.parseInt(policyId));
        policyDto.setStatus(status);
        policyDto.setName(name);
        policyDto.setPolicyDateStart(policyDateStart);
        policyDto.setPlanId(planId);
        policyDto.setCategoryId(categoryId);
        List<PolicyDto> list = insureUserMapper.selectPolicyList(policyDto);
        String[] rowName = new String[]{"ID", "name", "ID_type", "ID_number", "Scheme_name", "Date_start", "Branch", "Tricycle_frame_number", "benefit_occupation_category"};
//        for ()
//        XSSFWorkbook xssfWorkbook = ExcelUtils.exportExcel("导出人员清单.xlsx", rowName, list);
    }
}