package com.unis.base.server.domain;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.unis.base.common.vo.*;
import com.unis.base.server.dao.PersonSystemDao;
import com.unis.base.server.dao.PersonnelMxDao;
import com.unis.base.server.entity.PersonSystemDO;
import com.unis.common.utils.CurrentUtil;
import com.unis.common.utils.LsBeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.UUID;

@Component
public class PersonSystemDomain {
    @Autowired
    private PersonSystemDao personSystemDao;

    @Transactional
    public PageInfo<PersonSystemVO> pageSystem(PageSystemVO pageSystemVO) {
        //String orgId = CurrentUtil.getOrgId();
        List<PersonSystemDO> list = new ArrayList<>();
        PageInfo<PersonSystemVO> pageInfoVo = new PageInfo<>();
        PageHelper.startPage(pageSystemVO.getPageNum(), pageSystemVO.getPageSize());
        String orgCode = pageSystemVO.getDeptId();
        if (orgCode.equals("DP001")) {
            list = personSystemDao.selectSystem1(pageSystemVO.getFileName(), pageSystemVO.getOrgCode(), pageSystemVO.getStatus());
            for (PersonSystemDO personSystemDO : list) {
                if (personSystemDO.getStatus().equals("1")) {
                    personSystemDO.setUploadtime(null);
                }
            }
        } else {
            String userId = CurrentUtil.getUserId();
            String userName = CurrentUtil.getUserName();
            PageHelper.clearPage(); // 清除分页设置
            List<String> fid = personSystemDao.selectSs(userId);
            PageHelper.startPage(pageSystemVO.getPageNum(), pageSystemVO.getPageSize());
            list = personSystemDao.selectSystem(pageSystemVO.getFileName(),orgCode,pageSystemVO.getStatus(),fid,userName);
            for (PersonSystemDO personSystemDO : list) {
                if (personSystemDO.getStatus().equals("1")) {
                    personSystemDO.setUploadtime(null);
                }
            }
        }
        PageInfo<PersonSystemDO> pageInfoDo = new PageInfo<>(list);
        LsBeanUtils.copyAllProperties(pageInfoDo, pageInfoVo);
        return pageInfoVo;
    }

    @Transactional
    public void saveSystem(SavePersonVO savePersonVO) {
        String[] fileName = personSystemDao.seleectName(savePersonVO.getFileName());
        if (fileName.length > 0) {
            throw new RuntimeException("文件名称不可重复!");
        }
        //String orgId = CurrentUtil.getOrgId();
        String fid = UUID.randomUUID().toString().replaceAll("-", "");
        PersonSystemVO personSystemVO = new PersonSystemVO();
        personSystemVO.setFileName(savePersonVO.getFileName());
        personSystemVO.setFileCode(savePersonVO.getFileCode());
        personSystemVO.setCreator(savePersonVO.getCreator());
        personSystemVO.setUploadpath(savePersonVO.getUploadpath());
        personSystemVO.setOrgCode(savePersonVO.getOrgCode());
        personSystemVO.setDeptId(savePersonVO.getDeptId());
        // personSystemVO.setOrgCode(orgId);
        personSystemVO.setUploadtime(savePersonVO.getUploadtime());
        personSystemVO.setStatus(2);
        personSystemVO.setFid(fid);
        //personSystemVO.setDeptArr(savePersonVO.getDeptArr().toString());
        for (String s : savePersonVO.getDeptArr()) {
            String id = UUID.randomUUID().toString().replaceAll("-", "");
            personSystemDao.insertDept(fid, s, id);
        }
        personSystemDao.insertone(personSystemVO);
        List<PersonVO> personVoList = savePersonVO.getPersonVoList();
        for (PersonVO personVO : personVoList) {
            personVO.setMainFid(fid);
            personVO.setFileCode(savePersonVO.getFileCode());
        }
        if (personVoList.size() > 0) {
            personSystemDao.insertBath(personVoList);
        }

        if (savePersonVO.getSaveOrPublish() == 1) {
            personSystemDao.updateN(savePersonVO.getFileCode());
        } else if (savePersonVO.getSaveOrPublish() == 2) {
            personSystemDao.updateY(savePersonVO.getFileCode());
        }
    }

    public void updateSystem(SavePersonVO savePersonVO) {
        personSystemDao.updateOne(savePersonVO);
        List<PersonVO> personVoList = savePersonVO.getPersonVoList();
        String fid = savePersonVO.getFid();
        List<DeptArrVO> deplist = personSystemDao.selecDearr(fid);
        personSystemDao.delAllP(fid);
        for (PersonVO personVO : personVoList) {
            personVO.setMainFid(fid);
            personSystemDao.insertPerson(personVO);
            //personSystemDao.updatePerson(personVO);
        }
        personSystemDao.deleteAll(fid);
        for (String s : savePersonVO.getDeptArr()) {
            String id = UUID.randomUUID().toString().replaceAll("-", "");
            personSystemDao.insertDept(fid, s, id);
        }
        if (savePersonVO.getSaveOrPublish() == 1) {
            personSystemDao.updateN(savePersonVO.getFileCode());
        } else if (savePersonVO.getSaveOrPublish() == 2) {
            personSystemDao.updateY(savePersonVO.getFileCode());
        }
    }

    public void deleteOne(String id) {
        personSystemDao.deleteOne(id);
    }

    public PersonSystemVO selectSystem(String id) {
        PersonSystemVO personSystemVO = personSystemDao.SelectOne(id);
        String fid = personSystemVO.getFid();
        List<PersonVO> personVoList = personSystemDao.selectOm(fid);
        List<String> deptArr = personSystemDao.selectDept(fid);
        personSystemVO.setDeptArr(deptArr);
        personSystemVO.setPersonVoList(personVoList);
        return personSystemVO;
    }

    public void sentSystem(String fileCode, Integer status) {
        if (status != null) {
            if (status == 1) {
                personSystemDao.updateN(fileCode);
            } else if (status == 2) {
                personSystemDao.updateY(fileCode);
            }
        }
    }
}
