package com.pingcap.syngmail.thread;

import com.google.api.services.admin.directory.Directory;
import com.google.api.services.admin.directory.model.Groups;
import com.mysql.cj.util.StringUtils;
import com.pingcap.syngmail.mapper.EmployeeMapper;
import com.pingcap.syngmail.pojo.EmployeeDTO;
import com.pingcap.syngmail.util.GoogleApiUtils;
import lombok.extern.slf4j.Slf4j;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Callable;

/**
 * @author zhuxiaopeng
 * @version 1.0.0
 * @Description 遍历数据库人员信息
 * @createTime 2022年04月20日 17:48:00
 */
@Slf4j
public class EmloyeeInDB implements Callable {

    private Directory service;

    private EmployeeMapper employeeMapper;

    public EmloyeeInDB(Directory service, EmployeeMapper employeeMapper) {
        this.service = service;
        this.employeeMapper = employeeMapper;
    }

    @Override
    public Object call() throws Exception {
        List<EmployeeDTO> employeeDTOS = employeeMapper.listEmployeeDepartment();
        //特殊人员名单
        Map<String,Boolean> extra = new HashMap<>();
        extra.put("jiangxianjie@pingcap.com",true);
        extra.put("ivy.zhang@pingcap.com",true);
        extra.put("chenqingjing@pingcap.com",true);
        extra.put("xieyujie@pingcap.com",true);
        extra.put("brian.w@pingcap.com",true);
        extra.put("jianghuaxi@pingcap.com",true);
        extra.put("pikyin.song@pingcap.com",true);
        extra.put("zhuwei@pingcap.com",true);
        for (EmployeeDTO employeeDTO : employeeDTOS) {
            //是否还在公司
            if (employeeDTO.getActive() == 0) {
                if(extra.containsKey(employeeDTO.getEmail())){
                    continue;
                }
                //退出区域邮件组
                if (!StringUtils.isNullOrEmpty(employeeDTO.getEmail()) && !StringUtils.isNullOrEmpty(employeeDTO.getAreaEmailGroup())) {
                    if (GoogleApiUtils.isExistsMember(service,employeeDTO.getEmail(),employeeDTO.getAreaEmailGroup())) {
                        GoogleApiUtils.deleteMember(service, employeeDTO.getEmail(),"",employeeDTO.getAreaEmailGroup());
                    }
                }
                //退出相关部门
                try {
                    if (!StringUtils.isNullOrEmpty(employeeDTO.getEmail())) {
                        Groups execute = service.groups().list().setUserKey(employeeDTO.getEmail()).execute();
                        List<com.google.api.services.admin.directory.model.Group> groups = execute.getGroups();
                        if (groups!=null) {
                            for (com.google.api.services.admin.directory.model.Group group : groups) {
                                if (group.getName().startsWith("mg")) {
                                    if (GoogleApiUtils.isExistsMember(service, employeeDTO.getEmail(), group.getEmail())) {
                                        GoogleApiUtils.deleteMember(service, employeeDTO.getEmail(), group.getId(), group.getEmail());
                                    }
                                }
                            }
                        }
                    }
                } catch (IOException e) {
                    log.error(e.getMessage());
                }
            } else {
                //是否加入区域邮件组
                if (!StringUtils.isNullOrEmpty(employeeDTO.getEmail()) && !StringUtils.isNullOrEmpty(employeeDTO.getAreaEmailGroup())) {
                    if (!GoogleApiUtils.isExistsMember(service,employeeDTO.getEmail(),employeeDTO.getAreaEmailGroup())) {
                        GoogleApiUtils.addMember(service, employeeDTO.getEmail(), employeeDTO.getAreaEmailGroup());
                    }
                }
            }
        }
        return null;
    }
}
