package com.boco.nbd.wios.manage.controller;

import cn.hutool.core.lang.Assert;
import com.boco.nbd.cams.core.constant.CamsConstant;
import com.boco.nbd.wios.manage.contants.WiosConstant;
import com.boco.nbd.wios.manage.entity.bo.SupplierStaffBo;
import com.boco.nbd.wios.manage.entity.bo.SupplierStaffVo;
import com.boco.nbd.wios.manage.service.impl.SupplierStaffService;
import com.boco.nbd.wios.manage.util.CommonUtils;
import com.ihidea.component.api.v2.BaseResponse;
import com.ihidea.core.support.exception.ServiceException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 服务商员工管理接口
 *
 * @author xgl
 * @version [版本号, 2020年9月28日]
 */
@RestController
@RequestMapping("api")
@Api(tags = "服务商员工管理接口")
@ApiIgnore
public class SupplierStaffController {
    @Autowired
    private SupplierStaffService supplierStaffService;

    /**
     * 添加服务商员工
     *
     * @param supplierStaffBo
     * @return
     */
    @PostMapping(value = "supplierStaff/add")
    @ApiOperation(value = "添加服务商员工")
    @ApiImplicitParams({@ApiImplicitParam(name = "roleIds", value = "角色id", dataType = "String", paramType = "query", required = true),})
    public BaseResponse<Object> add(SupplierStaffBo supplierStaffBo) {
        Assert.notNull(supplierStaffBo.getName(), "姓名不能为空");
        Assert.notNull(supplierStaffBo.getSupplierId(), "服务商不能为空");
        Assert.notNull(supplierStaffBo.getPhone(), "电话不能为空");
        Assert.notNull(supplierStaffBo.getIsInsure(), "是否投保不能为空");
        Assert.notNull(supplierStaffBo.getDataAuth(), "数据权限不能为空");
        if (!StringUtils.isEmpty(supplierStaffBo.getCertFiles())) {
            String[] arr = supplierStaffBo.getCertFiles().split(CamsConstant.COMMA);
            List<String> list = new ArrayList<String>();
            for (String s : arr) {
                list.add(CommonUtils.urlHandle(s));
            }
            supplierStaffBo.setCertFiles(StringUtils.collectionToCommaDelimitedString(list));
        }
        //电工保险单据
        if (!StringUtils.isEmpty(supplierStaffBo.getInsureFiles())) {
            String[] insureArr = supplierStaffBo.getInsureFiles().split(CamsConstant.COMMA);
            List<String> insureFileList = new ArrayList<>();
            for (String str : insureArr) {
                insureFileList.add(CommonUtils.urlHandle(str));
            }
            supplierStaffBo.setInsureFiles(StringUtils.collectionToCommaDelimitedString(insureFileList));
        }
        //电工身份证
        if (!StringUtils.isEmpty(supplierStaffBo.getIdcardFiles())) {
            String[] idcardArr = supplierStaffBo.getIdcardFiles().split(CamsConstant.COMMA);
            List<String> idcardFileList = new ArrayList<>();
            for (String str : idcardArr) {
                idcardFileList.add(CommonUtils.urlHandle(str));
            }
            supplierStaffBo.setIdcardFiles(StringUtils.collectionToCommaDelimitedString(idcardFileList));
        }
        if (!StringUtils.isEmpty(supplierStaffBo.getCertExpireStr())) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            try {
                Date date = sdf.parse(supplierStaffBo.getCertExpireStr());
                supplierStaffBo.setCertExpire(date);
            } catch (ParseException e) {
                throw new ServiceException("日期格式错误");
            }
        }
        supplierStaffService.add(supplierStaffBo);
        return new BaseResponse<>();
    }

    /**
     * 更新服务商员工信息
     *
     * @param staff
     * @return
     */
    @PostMapping(value = "supplierStaff/update")
    @ApiOperation(value = "更新服务商员工")
    @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "主键id", dataType = "int", paramType = "query", required = true),
        @ApiImplicitParam(name = "name", value = "员工姓名", dataType = "String", paramType = "query", required = false),
        @ApiImplicitParam(name = "phone", value = "员工手机", dataType = "String", paramType = "query", required = false),
        @ApiImplicitParam(name = "certExpireStr", value = "电工证有效期", dataType = "String", paramType = "query", required = false),
        @ApiImplicitParam(name = "isInsure", value = "是否投保 0-未投保 1-已投保", dataType = "int", paramType = "query", required = false),
        @ApiImplicitParam(name = "dataAuth", value = "数据权限 1:个人 2:全部", dataType = "int", paramType = "query", required = false),
        @ApiImplicitParam(name = "certFiles", value = "电工证图片", dataType = "String", paramType = "query", required = false),
        @ApiImplicitParam(name = "insureFiles", value = "电工保险", dataType = "String", paramType = "query", required = false),
        @ApiImplicitParam(name = "idcardFiles", value = "电工身份证", dataType = "String", paramType = "query", required = false),
        @ApiImplicitParam(name = "status", value = "状态 0禁用 1启用", dataType = "int", paramType = "query", required = false),
    })
    public BaseResponse<Object> update(SupplierStaffBo staff) {
        if (!StringUtils.isEmpty(staff.getCertFiles())) {
            String[] arr = staff.getCertFiles().split(CamsConstant.COMMA);
            List<String> list = new ArrayList<>();
            for (String s : arr) {
                list.add(CommonUtils.urlHandle(s));
            }
            staff.setCertFiles(StringUtils.collectionToCommaDelimitedString(list));
        }
        //电工保险单据
        if (!StringUtils.isEmpty(staff.getInsureFiles())) {
            String[] insureArr = staff.getInsureFiles().split(CamsConstant.COMMA);
            List<String> insureFileList = new ArrayList<>();
            for (String str : insureArr) {
                insureFileList.add(CommonUtils.urlHandle(str));
            }
            staff.setInsureFiles(StringUtils.collectionToCommaDelimitedString(insureFileList));
        }
        //电工身份证
        if (!StringUtils.isEmpty(staff.getIdcardFiles())) {
            String[] idcardArr = staff.getIdcardFiles().split(CamsConstant.COMMA);
            List<String> idcardFileList = new ArrayList<>();
            for (String str : idcardArr) {
                idcardFileList.add(CommonUtils.urlHandle(str));
            }
            staff.setIdcardFiles(StringUtils.collectionToCommaDelimitedString(idcardFileList));
        }
        if (!StringUtils.isEmpty(staff.getCertExpireStr())) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            try {
                Date date = sdf.parse(staff.getCertExpireStr());
                staff.setCertExpire(date);
            } catch (ParseException e) {
                throw new ServiceException("日期格式错误");
            }
        }
        supplierStaffService.update(staff.getId(), staff);
        return new BaseResponse<>();
    }

    /**
     * 查询服务商员工列表
     *
     * @param account
     * @param name
     * @return
     */
    @GetMapping(value = "supplierStaff/list")
    @ApiOperation(value = "查询服务商员工列表")
    @ApiImplicitParams({@ApiImplicitParam(name = "page", value = "一页显示数量", dataType = "int", paramType = "query", required = false),
        @ApiImplicitParam(name = "pagecount", value = "页码", dataType = "int", paramType = "query", required = false),
        @ApiImplicitParam(name = "account", value = "账号", dataType = "String", paramType = "query", required = false),
        @ApiImplicitParam(name = "name", value = "名称", dataType = "String", paramType = "query", required = false),
        @ApiImplicitParam(name = "supplierId", value = "安装服务商id", dataType = "int", paramType = "query", required = false),
        @ApiImplicitParam(name = "showCertExpired", value = "显示电工证过期的数据 0:否 1:是", dataType = "int", paramType = "query", required = false),

    })
    public BaseResponse<List<SupplierStaffVo>> getList(String account, String name, Integer supplierId, Integer showCertExpired) {
        SupplierStaffBo condition = new SupplierStaffBo();
        condition.setAccount(account);
        condition.setName(name);
        condition.setSupplierId(supplierId);
        condition.setShowCertExpired(showCertExpired);
        return new BaseResponse<>(supplierStaffService.getList(condition));
    }
}