package com.zanxiang.game.data.serve.component;

import com.zanxiang.erp.base.ErpServer;
import com.zanxiang.erp.base.rpc.ISysGameUserGroupRpc;
import com.zanxiang.erp.security.util.SecurityUtil;
import com.zanxiang.game.module.base.ServerInfo;
import com.zanxiang.game.module.base.rpc.GameAuthRpc;
import com.zanxiang.module.util.JsonUtil;
import com.zanxiang.module.util.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

@Slf4j
@Component
public class DataPowerComponent {

    @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
    private ISysGameUserGroupRpc sysGameUserGroupRpc;

    @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
    private GameAuthRpc gameAuthRpc;

    /**
     * 获取当前登录用户有权限查看的用户列表
     * 1：普通用户-投手：自己
     * 1：普通用户-运营：null-->表示不按权限做
     * 2：投手组长：自己+组员
     * 3：管理员：自己+组员
     * 4：超管：null-->有权限看所有数据
     */
    public List<Long> getSubUserIdList() {
        if (SecurityUtil.isAdmin()) {
            return null;
        }
        Collection<Long> subUserIds = sysGameUserGroupRpc.memberUserIds(SecurityUtil.getCompanyId(), SecurityUtil.getUserId()).getData();
        if (subUserIds.size() > 1) {
            // 自然量
            subUserIds.add(-2L);
        }
        log.error("1111--------->" + JsonUtil.toString(subUserIds));
        return new ArrayList<>(subUserIds);
    }


    /**
     * 获取当前登录用户有权限查看的游戏列表
     * 1：普通运营：自己有权限的游戏列表
     * 2：普通投手：自己有投的游戏列表
     * 3：投手组长：自己+组员投的游戏列表
     * 4：管理员：自己+组员投的游戏列表
     * 5：超管：null-->表示不用此字段做游戏过滤
     */
    public List<Long> getSubGameIdList() {
        if (SecurityUtil.isAdmin()) {
            return null;
        }
        List<Long> gameIdList = gameAuthRpc.getGameAuthByUserIds().getData().getGameIdList();
        if(CollectionUtils.isEmpty(gameIdList)) {
            throw new BaseException("没有游戏查看权限，请联系管理员指派游戏权限");
        }
        return gameIdList;
    }
}
