package com.css.txw.sso.mapper.oauth2;

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.css.ggzc.framework.common.util.gy.GyUtils;
import com.css.txw.sso.pojo.domain.oauth2.OAuth2AccessTokenDO;
import com.css.ggzc.framework.mybatis.core.mapper.BaseMapperX;
import com.css.ggzc.framework.mybatis.core.query.QueryWrapperX;
import org.apache.ibatis.annotations.Mapper;

import java.time.LocalDateTime;
import java.util.List;

@Mapper
public interface OAuth2AccessTokenMapper extends BaseMapperX<OAuth2AccessTokenDO> {

    default OAuth2AccessTokenDO selectByAccessToken(String accessToken) {
        return selectOne(OAuth2AccessTokenDO::getAccessToken, accessToken);
    }

    default List<OAuth2AccessTokenDO> selectByYhuuid(String yhuuid) {
        return selectList(OAuth2AccessTokenDO::getYhUuid, yhuuid);
    }

    default List<OAuth2AccessTokenDO> selectRefreshTokenByAccessTokens(List<String> accessTokens) {
        QueryWrapperX<OAuth2AccessTokenDO> wrapperX = new QueryWrapperX<>();
        wrapperX.lambda()
//                .select(OAuth2AccessTokenDO::getRefreshToken)
                .in(OAuth2AccessTokenDO::getAccessToken, accessTokens);
        return selectList(wrapperX);
    }


    default List<OAuth2AccessTokenDO> selectListByRefreshToken(String refreshToken) {
        return selectList(OAuth2AccessTokenDO::getRefreshToken, refreshToken);
    }

    default Integer updateCompany(String accessToken,String jguuid){
        UpdateWrapper<OAuth2AccessTokenDO> updateWrapper = new UpdateWrapper<>();
        if (!GyUtils.isNull(jguuid)){
            updateWrapper.set("qyuuid",jguuid);
        }
        updateWrapper.set("xgrq", LocalDateTime.now());
        updateWrapper.set("xgrsfid","SSO");
        updateWrapper.eq("access_token",accessToken);
        return update(updateWrapper);
    }

    default Integer updateGllp(String uuid,String gllp){
        LambdaUpdateWrapper<OAuth2AccessTokenDO> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.set(OAuth2AccessTokenDO::getGllp,gllp)
                .eq(OAuth2AccessTokenDO::getUuid,uuid);
        return update(updateWrapper);
    }

    default Integer deleteByTokens(List<String> tokens){
        QueryWrapperX<OAuth2AccessTokenDO> wrapperX = new QueryWrapperX<>();
        wrapperX.lambda().in(OAuth2AccessTokenDO::getAccessToken, tokens);
        return delete(wrapperX);
    }

    default Integer updateGllpByTokens(List<String> tokens,String gllp){
        LambdaUpdateWrapper<OAuth2AccessTokenDO> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.set(OAuth2AccessTokenDO::getGllp,gllp)
                .in(OAuth2AccessTokenDO::getUuid,tokens);
        return update(updateWrapper);
    }


}
