package com.miaxis.app.controller.gzpt;


import com.miaxis.common.annotation.Log;
import com.miaxis.common.constant.Constants;
import com.miaxis.common.core.controller.BaseController;
import com.miaxis.common.core.domain.Response;
import com.miaxis.common.enums.BusinessTypeEnum;
import com.miaxis.newgzpt.domain.GzptVideoVip;
import com.miaxis.newgzpt.dto.GzptVideoVipDTO;
import com.miaxis.newgzpt.service.IGzptVideoVipService;
import com.miaxis.newgzpt.vo.GzptVideoVipVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

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

/**
 * <p>
 * 学员基本信息表 前端控制器
 * </p>
 *
 * @since 2021-03-09
 */
@RestController
@Api(tags = "【app-学员视频VIP信息(旧版本)】")
@RequestMapping(Constants.OPEN_PREFIX+"/gzpt/videoVip")
public class GzptVideoVipController extends BaseController {

    @Autowired
    private IGzptVideoVipService gzptVideoVipService;


    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==";

    /**
     * 获取用户vip信息
     */
    @GetMapping
    @ApiOperation("获取用户vip信息")
    public Response<GzptVideoVipVO> getVideoVip(GzptVideoVipDTO gzptVideoVipDTO) throws Exception {
        GzptVideoVip gzptVideoVip  = gzptVideoVipService.getGzptVideoVipByUserId(gzptVideoVipDTO);
        GzptVideoVipVO vo = new GzptVideoVipVO();
        if(gzptVideoVip!=null) {
            BeanUtils.copyProperties(gzptVideoVip, vo);
            String sign = getSign(vo.getUserId(), vo.getSubject2(), vo.getSubject3());
            vo.setSign(sign);
            return Response.success(vo);
        } else {
            return Response.success(vo);
        }
    }




    /**
     * 删除会员信息
     */
    @Log(title = "删除会员信息", businessType = BusinessTypeEnum.DELETE)
    @DeleteMapping("/{userId}")
    @ApiOperation("删除会员信息")
    public Response<Integer> remove(
            @ApiParam(name = "userId", value = "gzpt用户id", required = true)
            @PathVariable Long userId
    ) {
        return Response.success(gzptVideoVipService.removeByUserId(userId));
    }




    private String getSign(Long userId, Date subject2, Date subject3) throws Exception  {
        String str = userId+"";
       // System.out.println(userId);
        if(subject2!=null){
            str += subject2.getTime()+"";
        //   System.out.println(subject2.getTime());
        }
        if(subject3!=null){
            str += subject3.getTime()+"";
         //   System.out.println(subject3.getTime());
        }
        System.out.println("str："+str);
        // 进行签名服务
        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);

    }

}

