package com.miaxis.app.controller.user;

import com.miaxis.common.core.controller.BaseController;
import com.miaxis.common.core.domain.Response;
import com.miaxis.common.core.domain.entity.UserInfo;
import com.miaxis.common.utils.SecurityUtils;
import com.miaxis.user.service.IUserInfoService;
import com.miaxis.user.vo.UserVipInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.Signature;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Base64;

/**
 * 【用户】Controller
 *
 * @author miaxis
 * @date 2021-08-18
 */
@RestController
@RequestMapping("/user/info")
@Api(tags={"【app-用户】"})
public class UserInfoController extends BaseController{
    @Autowired
    private IUserInfoService userInfoService;

    private String  rsaPrivateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMLNHTgsyYOXDJVF8r4qCyb+8Uw4" +
            "XKq8aThAhUIaPYIop+HJxETGbXk3e0o46i4iOX8RTv0i3jmhL6W0mSxy9ismfXPP7VtKgEt6VnMm" +
            "ufsrQ2kcXyRsKmuwUd3rTH5gniXwLdIPF8V5ujiSq94nPHok1krDMWbss8Q7lcH2kQFHAgMBAAEC" +
            "gYBh6Eu2TzRdMg79+7EciO8gA2Tt5SoWGipcPnl7lsqxX5O5dPpzgrPFB/CshlyVIVh6mA12Rw8g" +
            "MfZLt7CA2asFdgGHfgCvMjsCnL2U1Nf1QFnsnGXmFXeVUvdy7XPILi75rVyOEAw+/f3KzjSA7B3w" +
            "URE8M2QlIUcjm8LLyCVC4QJBAO+taJH7pVZGVn2upsOk14X08QU0lsQ7ufe/8VXe+IujwGMh34U6" +
            "BHGV7grodtA7TvQ3mDggQLHB2+IxBWdDCrcCQQDQEVMI+CD7afEyN9rK/MAJwevtxNaTyEd1bhKw" +
            "t6WKr1YbAdUz2gvnpCQjD1Gqt5yXHKu279msX9W4euXePG3xAkBUCYZn4UdIp+L9sHZSlQLoukik" +
            "HZtbdOGw58Ez7blSJPl5CNB5wyz5sqtDcdzvCEyXvsKFs3FbonB5r9yIJ26jAkEAugGC1dXcxmWj" +
            "dl1wf18M3qw6GkmJ+ntlRpmso8bJev3cYDB3RO99DQw0MhOT0qZqmrzK1bP+SJc0HMPhk5c6QQJA" +
            "WRLIxmeM/P9X2mDjMrI46Wnn27QoKGgYSHdPxmLD0y7NUytf5HyCsY2vhA9FZcnikibax7SwzC/B" +
            "D7yOXFAy/Q==";


    /**
     * 获取用户详细信息
     */
    @GetMapping(value = "/vipInfo")
    @ApiOperation("vip信息")
    public Response<UserVipInfoVO> getInfo(
    ) throws Exception {
        UserInfo student = SecurityUtils.getLoginUser().getStudent();
        UserInfo dbUserInfo = userInfoService.getById(student.getId());
        UserVipInfoVO userVipInfoVO = new UserVipInfoVO();
        userVipInfoVO.setId(dbUserInfo.getId());
        userVipInfoVO.setIsVip(dbUserInfo.getIsVip());
        userVipInfoVO.setUnionId(dbUserInfo.getUnionId());
        userVipInfoVO.setHeadImage(dbUserInfo.getHeadImage());
        userVipInfoVO.setNickName(dbUserInfo.getNickName());
        userVipInfoVO.setSign(getSign(dbUserInfo.getIsVip(),dbUserInfo.getUnionId()));
        return Response.success(userVipInfoVO);
    }

    /**
     * 获取用户详细信息
     */
    @PutMapping(value = "/userInfo")
    @ApiOperation("更新用户头像和昵称")
    public Response updateInfo(String headImage,String nickName
    ) throws Exception {
        Long id = SecurityUtils.getLoginUser().getStudent().getId();
        UserInfo dbUserInfo = userInfoService.getById(id);
        dbUserInfo.setNickName(nickName);
        dbUserInfo.setHeadImage(headImage);
        return Response.success(userInfoService.updateById(dbUserInfo));
    }

    private String getSign(Integer isVip, String unionId) throws Exception  {
        String str = unionId+isVip;
        // 进行签名服务
        Signature signature = Signature.getInstance("SHA256withRSA");
        KeyFactory kf = KeyFactory.getInstance("RSA");
        PrivateKey privateKey =  kf.generatePrivate(new PKCS8EncodedKeySpec(Base64.getDecoder().decode(rsaPrivateKey)));
        signature.initSign(privateKey);
        signature.update(str.getBytes("UTF-8"));
        byte[] signedData = signature.sign();
        return Base64.getEncoder().encodeToString(signedData);



    }


}
