package com.css.txw.sso.service.session;

import com.css.ggzc.framework.common.util.gy.GyUtils;
import com.css.txw.sso.mapper.oauth2.OAuth2AccessTokenMapper;
import com.css.txw.sso.pojo.domain.oauth2.OAuth2AccessTokenDO;
import com.css.txw.sso.pojo.dto.session.SessionInfo;
import com.css.txw.sso.pojo.yhxx.SwitchCompanyResDTO;
import com.css.txw.sso.util.OAuth2AccessTokenRedisDAO;
import com.css.ggzc.framework.common.util.object.BeanUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

@Slf4j
@Service
public class SwitchSessionServiceImpl implements SwitchSessionService{

    @Resource
    private OAuth2AccessTokenMapper oauth2AccessTokenMapper;

    @Resource
    private OAuth2AccessTokenRedisDAO redisDAO;

    @Transactional
    @Override
    public SwitchCompanyResDTO switchCompany(String token, String jguuid) {
        log.info("切换企业接口收到入参 token:{},jguuid:{}",token,jguuid);
        final SwitchCompanyResDTO switchCompanyResDTO = new SwitchCompanyResDTO();
//        SessionInfo sessionInfo = redisDAO.getSessionInfo(token);
//        final JgInfo oldjgxx = sessionInfo.getQyxx();
//        if (!GyUtils.isNull(oldjgxx)&&!GyUtils.isNull(oldjgxx.getQyuuid())){
//            final String oldId = oldjgxx.getQyuuid();
//            if (oldId.equals(jguuid)){
//                return switchCompanyResDTO;
//            }
//        }
//        final CktsMhqxQyxxbDO jgxx = jgxxbMapper.getQyxx(jguuid);
//        log.info("切换企业接口切换企业信息：{}",jgxx);
//        if (!GyUtils.isNull(jgxx)){
//            asyncTask.rpa(jgxx.getNsrsbh(),jgxx.getXzqhszDm());
//
//            switchCompanyResDTO.setQyuuid(jguuid);
//            switchCompanyResDTO.setQymc(jgxx.getQymc());
//            switchCompanyResDTO.setNsrsbh(jgxx.getNsrsbh());
//            //机构信息
//            JgInfo jgInfo = new JgInfo();
//            jgInfo.setQyuuid(jgxx.getQyuuid());
//            jgInfo.setQymc(jgxx.getQymc());
//            jgInfo.setNsrsbh(jgxx.getNsrsbh());
//            jgInfo.setShxydm(jgxx.getShxydm());
//            jgInfo.setDjxh(jgxx.getDjxh());
//            jgInfo.setQydid(jgxx.getQydid());
//            jgInfo.setXzqhszDm(jgxx.getXzqhszDm());
//            jgInfo.setQylx2(jgxx.getQylx2());
//
//            ZnsbMhzcQyjbxxmxDO qyjbxx = qyjbxxmxMapper.selectByDjxh(jgxx.getDjxh());
//            if (!GyUtils.isNull(qyjbxx)) {
//                jgInfo.setFddbrxm(qyjbxx.getFddbrxm());
//                jgInfo.setNsrztDm(qyjbxx.getNsrztDm());
//            }
//
//            List<CktsMhzcNsrzgxxDTO> nsrlxs = nsrzgxxMapper.getNsrlx(jgxx.getDjxh());
//            String ybnsrbz = !GyUtils.isNull(nsrlxs)&& Arrays.asList("1","3","4").contains(nsrlxs.get(0).getNsrlx())?"Y":"N";
//            jgInfo.setYbnsrbz(ybnsrbz);
//
//            //备案信息
//            BaxxInfo baxxInfo = new BaxxInfo();
//            List<CktsMhzcBaBaxxJgb> cktsMhzcBaBaxxJgbs = baxxJgbMapper.queryBaxx(jgxx.getDjxh());
//            if (!GyUtils.isNull(cktsMhzcBaBaxxJgbs)){
//                CktsMhzcBaBaxxJgb cktsMhzcBaBaxxJgb = cktsMhzcBaBaxxJgbs.get(0);
//                baxxInfo = BeanUtils.toBean(cktsMhzcBaBaxxJgb, BaxxInfo.class);
//                String bachbz = cktsMhzcBaBaxxJgb.getBachbz();
//                //根据bachbz（备案撤回标志）判断，如果为Y，则nsrbaxxyxbz为N，否则为Y
//                String nsrbaxxyxbz = !GyUtils.isNull(baxxInfo)&&"Y".equals(bachbz)?"N":"Y";
//                baxxInfo.setNsrbaxxyxbz(nsrbaxxyxbz);
//                baxxInfo.setQylx(cktsMhzcBaBaxxJgb.getCktsqylxDm());
//            }
//
//            //用户类型
//            List<CktsMhqxYhqyGxbDO> qyxx = yhjgGxbMapper.getQyxx(sessionInfo.getYhxx().getYhuuid(), jguuid,null);
//            String yhlx = "";
//            if (!GyUtils.isNull(qyxx)){
//                yhlx = qyxx.get(0).getYhlx();
//            }
//            redisDAO.refreshJgxx(token,jgInfo,baxxInfo,jgxx.getSsjswjgDm(),yhlx);
//        }
//        oauth2AccessTokenMapper.updateCompany(token,jguuid);
//        CktsMhqxYhxxbDO cktsMhqxYhxxbDO = new CktsMhqxYhxxbDO();
//        cktsMhqxYhxxbDO.setScdljguuid(jguuid);
//        cktsMhqxYhxxbDO.setYhUuid(sessionInfo.getYhxx().getYhuuid());
//        yhxxbMapper.updateById(cktsMhqxYhxxbDO);

        return switchCompanyResDTO;
    }

    @Override
    public String addCompany(SwitchCompanyResDTO resDTO) {
        List<OAuth2AccessTokenDO> oAuth2AccessTokenDOS = oauth2AccessTokenMapper.selectByYhuuid(resDTO.getYhuuid());
        if (GyUtils.isNull(oAuth2AccessTokenDOS)) return "null";
        oAuth2AccessTokenDOS.forEach(v->{
            redisDAO.refreshQyxx(v.getAccessToken(),resDTO.getQyuuid(),resDTO.getQymc(),resDTO.getNsrsbh());
        });
        return "success";
    }

}
