package com.malk.xiding;

import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.kingdee.bos.webapi.entity.IdentifyInfo;
import com.kingdee.bos.webapi.entity.RepoRet;
import com.kingdee.bos.webapi.sdk.K3CloudApi;
import com.malk.xiding.config.KDWebApiConf;
import com.malk.xiding.entity.*;
import com.malk.xiding.service.JinlunTaskService;
import com.malk.server.common.McR;
import com.malk.utils.UtilHttp;
import com.malk.utils.UtilMap;
import com.malk.utils.UtilToken;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.MessageDigest;
import java.util.*;

@Slf4j
@SpringBootTest
@RunWith(SpringRunner.class)
public class DdTest {
    @Autowired
    private KDWebApiConf kdWebApiConf;

    @Autowired
    private JinlunTaskService jinlunTaskService;

    @Test
    public void test2() {
        jinlunTaskService.syncMaterial();
    }

    @Test
    public void test4() {
        jinlunTaskService.syncSaleOut();
    }

    @Test
    public void test5() {
        jinlunTaskService.syncReceipt();
    }

    @Test
    public void test6() {
        jinlunTaskService.syncReceivable();
    }
    @Test
    public void test7() {
        jinlunTaskService.syncSaleReturn();
    }

    @Test
    public void test8() {
        try {
            String filePath = "C:\\Users\\EDY\\Pictures\\4.png"; // 替换为你的文件路径

            // 1. 读取文件为字节数组
            byte[] fileBytes = Files.readAllBytes(Paths.get(filePath));

            // 2. 转换为Base64字符串
            String base64String = Base64.getEncoder().encodeToString(fileBytes);

            System.out.println("Base64编码结果:");
            System.out.println(base64String);


            K3CloudApi client = new K3CloudApi(initIden());



            Map map = new HashMap();
            map.put("FileName", "4.png");//文件名
            map.put("FormId", "SAL_SaleOrder");//表单id
            map.put("IsLast", true);//是否最后一次上传
            map.put("InterId", "104784");//单据内码
//            map.put("Entrykey", "");//单据体标识
//            map.put("EntryinterId", "-1");//分录内码
            map.put("BillNO", "S301-251118005");//单据编号
//        map.put("AliasFileName", "test");
//        map.put("FileId", "");
            map.put("SendByte", base64String);//文件字节数组转base64后的字符串

            String resultJson = client.attachmentUpload(JSONObject.toJSONString(map));

            Map parse = (Map) JSONObject.parse(resultJson);

            Map map1 = UtilMap.getMap(parse, "Result");

            String fileId = UtilMap.getString(map1, "FileId");

            System.out.println(fileId);


        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Test
    public void test10(){
        try {
            String acctID = "66816d8a115ffc";
            String username = "Administrator";
            String appId = "295561_7e1I0bHHVqGaSZxJ7Z4pVxxs7L5bxMMI";
            String appSec = "0f51467e39764b548ec3d75159dfbd2b";
            String timestamp = System.currentTimeMillis()/1000 + "";

            String[] arr = {acctID,username,appId,appSec,timestamp};

            Arrays.sort(arr, (a, b) -> a.compareTo(b));

            System.out.println("排序结果:");

            for (String s : arr) {
                System.out.println(s);
            }


            String str = String.join("", arr);

            // 1. 创建 MessageDigest 实例，指定 SHA-256 算法
            MessageDigest digest = MessageDigest.getInstance("SHA-256");

            // 2. 输入字符串转换为字节数组，并计算哈希值
            byte[] hashBytes = digest.digest(str.getBytes(StandardCharsets.UTF_8));

            // 3. 将字节数组转换为十六进制字符串
            StringBuilder hexString = new StringBuilder();
            for (byte b : hashBytes) {
                String hex = Integer.toHexString(0xff & b);
                if (hex.length() == 1) {
                    hexString.append('0'); // 补零
                }
                hexString.append(hex);
            }

            // 4. 输出结果
            System.out.println("SHA-256 哈希值: " + hexString.toString());
        }catch (Exception e){
            throw new RuntimeException(e);
        }


    }

    @Test
    public void test11(){
//        String input = "RElSRV82NjdmODEyMmJkYzM0NDUyYWMyYjM3Mjg5NTAzYjhhMjEucG5n";
        String input = "RElSRV9iNWViMTdlZTA1NTI0OTU1YmM3MjM3YWEyMzU5OTY5MDIucG5n";
        String s = new String(Base64.getUrlDecoder().decode(input), StandardCharsets.UTF_8);

        System.out.println(s);

    }

    @Test
    public void test12() {
        jinlunTaskService.syncXingneng();
    }


    private IdentifyInfo initIden(){
        //注意 1：此处不再使用参数形式传入用户名及密码等敏感信息，改为在登录配置文件中设置。
        //注意 2：必须先配置第三方系统登录授权信息后，再进行业务操作，详情参考各语言版本SDK介绍中的登录配置文件说明。
        //读取配置，初始化SDK
        IdentifyInfo iden = new IdentifyInfo();
        iden.setUserName(kdWebApiConf.getXKDApiUserName());
        iden.setAppId(kdWebApiConf.getXKDApiAppID());
        iden.setdCID(kdWebApiConf.getXKDApiAcctID());
        iden.setAppSecret(kdWebApiConf.getXKDApiAppSec());
        iden.setServerUrl(kdWebApiConf.getXKDApiServerUrl());

        return iden;
    }



    @Test
    public void test3() {
        testGetAccessToken();

        testGetAccessToken();
    }

    @Test
    public void testGetAccessToken(){
        String accessToken = UtilToken.get("invalid-token-cloudpivot");

        if (StringUtils.isNotBlank(accessToken)) {
            log.info(accessToken);
        } else {
            Map<String,Object> params = new HashMap();
            params.put("grant_type","client_credentials");
            params.put("client_id","xclient");
            params.put("client_secret","0a417ecce58c31b32364ce19ca8fcd15");

            String s = UtilHttp.doPost("http://192.168.0.12/api/oauth/token", null, params, new HashMap());

            Map result = (Map) JSONObject.parse(s);

            accessToken = "bearer" + UtilMap.getString(result, "access_token");

            long expiresIn = UtilMap.getLong(result, "expires_in") * 1000;

            UtilToken.put("invalid-token-cloudpivot", accessToken, expiresIn);

            log.info(accessToken);
        }

    }

}
