package com.brilliance.isc.es.validator.test.unit;

import com.brilliance.isc.common.validator.es.vo.EnvDespVo;
import com.brilliance.isc.common.validator.es.support.impl.EsScriptValidator;
import com.brilliance.isc.es.validator.test.model.XxxBo;
import com.brilliance.isc.common.validator.es.utils.EsConstant;
import com.brilliance.isc.es.validator.test.starter.EsValidatorApplication;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import javax.script.CompiledScript;
import javax.script.ScriptEngine;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

@SpringBootTest(classes = EsValidatorApplication.class)
public class EsValidatorTest {

    @Resource
    private EsScriptValidator esScriptValidator;

    @Test
    public void compileForJava(){
        EnvDespVo envDespVo = EnvDespVo.builder().scriptName("Xxxopn").
                terminal(EsConstant.JAVA_TERMINAL)
                .subtype(EsConstant.JS_TYPE).build();
        CompiledScript compiledScript = esScriptValidator.compileForJava(envDespVo);
        ScriptEngine engine = compiledScript.getEngine();
        System.out.println(engine);
    }

    @Test
    public void validateBoForMap(){
        Map<String,Object> bo = new HashMap<String,Object>();
        Map<String,Object> xxxgrp = new HashMap<>();
        bo.put("xxxgrp",xxxgrp);

        Map<String,Object> rec = new HashMap<>();
        xxxgrp.put("rec",rec);
        rec.put("cur","JPY");
        Map<String,String> messageMap = esScriptValidator.validateBo(bo,"Xxxopn");
        System.out.println(messageMap);
        rec.put("cur","CNY");
        messageMap = esScriptValidator.validateBo(bo,"Xxxopn");
        System.out.println(messageMap);
    }

    @Test
    public void validateBo(){
        XxxBo bo = new XxxBo();
        bo.reset();
        bo.getXxxgrp().getRec().setCur("JPY");

        Map<String,String> messageMap = esScriptValidator.validateBo(bo,"Xxxopn");
        System.out.println(messageMap);

        messageMap = esScriptValidator.validateBo(bo,"Xxxopn");
        System.out.println(messageMap);

        bo.getXxxgrp().getRec().setAmt(BigDecimal.TEN);
        messageMap = esScriptValidator.validateBo(bo,"Xxxopn");
        System.out.println(messageMap);

        bo.getXxxgrp().getRec().setCur("CNY");
        bo.getXxxgrp().getRec().setNam("&*&%$");
        messageMap = esScriptValidator.validateBo(bo,"Xxxopn");
        System.out.println(messageMap);

        bo.getXxxgrp().getRec().setNam("fukai123");
        messageMap = esScriptValidator.validateBo(bo,"Xxxopn");
        System.out.println(messageMap);

        bo.getXxxgrp().getRec().setNam("fukai");
        messageMap = esScriptValidator.validateBo(bo,"Xxxopn");
        System.out.println(messageMap);
//        StopWatch stopWatch = new StopWatch();
//        stopWatch.start("统计Nashorn时长");
//        for (int i = 0; i < 1000; i++) {
//            messageMap = esScriptValidator.validateBo(bo,"Xxxopn");
//            System.out.println(messageMap);
//        }
//        stopWatch.stop();
//        System.out.println(stopWatch.prettyPrint());
    }

}
