package cn.wisenergy.chnmuseum.party.service.impl;

import cn.wisenergy.chnmuseum.party.common.enums.AuditOperationEnum;
import cn.wisenergy.chnmuseum.party.common.enums.AuditStatusEnum;
import cn.wisenergy.chnmuseum.party.common.util.RSAUtils;
import cn.wisenergy.chnmuseum.party.mapper.TAreaMapper;
import cn.wisenergy.chnmuseum.party.mapper.TUserMapper;
import cn.wisenergy.chnmuseum.party.model.TBoxOperation;
import cn.wisenergy.chnmuseum.party.model.TUser;
import cn.wisenergy.chnmuseum.party.model.TUserRole;
import cn.wisenergy.chnmuseum.party.service.TUserService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * <pre>
 * 用户 服务实现类
 * </pre>
 *
 * @author Danny Lee
 * @since 2021-03-22
 */
@Slf4j
@Service
@Transactional
public class TUserServiceImpl extends ServiceImpl<TUserMapper, TUser> implements TUserService {

    @Resource
    private TUserMapper tUserMapper;

    @Resource
    private TAreaMapper areaMapper;

    @Resource
    TBoxOperationServiceImpl boxOperationService;


    @Resource
    TUserRoleServiceImpl tUserRoleService;

    @Override
    public TUser selectByUsername(String userName) {
        return tUserMapper.selectByUsername(userName);
    }

    @Override
    public Page<TUser> getList(Page<TUser> page, TUser user) {
        List<TUser> list = tUserMapper.getList(page, user);
        for (TUser u : list) {
            if (AuditStatusEnum.REFUSED.name().equals(u.getAuditStatus()) || AuditStatusEnum.APPROVED_FINAL.name().equals(u.getAuditStatus())) {
                if (AuditOperationEnum.ENABLE.name().equals(u.getStatus())) {
                    u.setStatusName("活跃");
                } else {
                    u.setStatusName("禁用");
                }
            } else {
                u.setStatusName("待审核");
            }
        }
        return page.setRecords(list);
    }

    @Override
    public TUser selectById(String id) {
        TUser user = tUserMapper.getById(id);
        if (user.getAreaId() != null) {
            String s = areaMapper.selectParent(user.getAreaId());
            if (s != null) {
                user.setAreas(Arrays.asList(s.split(",")));
            }
        }
        return user;
    }

    @Override
    public List<TUser> getUserList(TUser user) {
        return tUserMapper.getUserList(user);
    }

    @Override
    public boolean addBox(TUser user) {
        boolean ret;
        save(user);

        TBoxOperation tBoxOperation = new TBoxOperation();
        tBoxOperation.setOrganId(user.getOrgId());
        tBoxOperation.setAreaId(user.getAreaId());
        tBoxOperation.setStatus(1);
        tBoxOperation.setCreateTime(LocalDateTime.now());
        tBoxOperation.setUpdateTime(LocalDateTime.now());
        final ArrayList<String> rsaKeys = RSAUtils.createRSAKeys();
        tBoxOperation.setPublicKey(rsaKeys.get(0));
        tBoxOperation.setPrivateKey(rsaKeys.get(1));
        ret = boxOperationService.save(tBoxOperation);

        TUserRole userRole = new TUserRole();
        userRole.setUserId(user.getId());
        userRole.setRoleId("3");
        userRole.setIsDeleted(false);
        ret = tUserRoleService.save(userRole);

        return ret;
    }

}