package com.kmall.api.service;

import com.google.common.collect.Maps;
import com.kmall.api.cache.UserTokenCache;
import com.kmall.api.entity.TokenEntity;
import com.kmall.common.utils.CharUtil;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;


@Service
public class TokenService {
    //12小时后过期
    private final static int EXPIRE = 3600 * 12;

    public Map<String, Object> createAndUpdateToken(String openId, Long storeId, Long userId,String merchSn,String isRefusedLogin) {
        //生成一个token
        String token = CharUtil.getRandomString(32);
        //当前时间
        Date now = new Date();

        //过期时间
        Date expireTime = new Date(now.getTime() + EXPIRE * 1000);

        //判断是否生成过token
//        TokenEntity tokenEntity = queryByUserId(userId);
        TokenEntity tokenEntity = UserTokenCache.getUserTokenByUserId(userId);
        if (tokenEntity == null) {
            tokenEntity = new TokenEntity();
            tokenEntity.setUserId(userId);
            tokenEntity.setOpenId(openId);
            tokenEntity.setToken(token);
            tokenEntity.setUpdateTime(now);
            tokenEntity.setExpireTime(expireTime);
            tokenEntity.setStoreId(storeId);
            tokenEntity.setIsRefusedLogin(isRefusedLogin);
            if(StringUtils.isNotEmpty(merchSn)) {
                tokenEntity.setMerchSn(merchSn);
            }

            //保存token
//            save(tokenEntity);
            UserTokenCache.putUserToken(tokenEntity);
        } else {
            tokenEntity.setIsRefusedLogin(isRefusedLogin);
            token = tokenEntity.getToken();
//            tokenEntity.setToken(token);
            tokenEntity.setUpdateTime(now);
            tokenEntity.setExpireTime(expireTime);
            if (null != storeId) {
                tokenEntity.setStoreId(storeId);
            }
            if(StringUtils.isNotEmpty(merchSn)) {
                tokenEntity.setMerchSn(merchSn);
            }
            //更新token
//            update(tokenEntity);
            UserTokenCache.putUserToken(tokenEntity);
        }

        Map<String, Object> map = Maps.newHashMap();
        map.put("token", token);
        map.put("expire", EXPIRE);

        return map;
    }
}
