package com.bonait.bnframework.HBL;

import com.bonait.bnframework.HBL.Dialog.AlertDialogButton;
import com.bonait.bnframework.HBL.Dialog.DialogManager;
import com.bonait.bnframework.HBL.Interface.IFunc;
import com.bonait.bnframework.HBL.Logs.MessageLog;
import com.bonait.bnframework.HBL.Result.OperateResult;

public class Unity {

    public static  void Delay(long miss){
        try{
            Thread.sleep(miss);
        }catch  (Exception e){}
    }

    /**
     * 阻塞等待条件满足
     * @param func
     * @param timeOut
     * @return
     */
    public static OperateResult Wait(IFunc func, int timeOut){
        long startTime = System.currentTimeMillis();
        if(func==null) return OperateResult.CreateFailed("条件为空");
        boolean tag=false;
        while(!tag){
            tag=func.Run();
            Delay(100);
            if(timeOut>0&&(System.currentTimeMillis()-startTime)>timeOut) break;
        }
        if(!tag) MessageLog.ShowInfo("任务超时，超时时间："+String.valueOf(timeOut)+"/"+String.valueOf(System.currentTimeMillis()-startTime));

//           System.out.println("任务超时，超时时间："+String.valueOf(timeOut)+"/"+String.valueOf(System.currentTimeMillis()-startTime));
        return tag?OperateResult.CreateSuccess():OperateResult.CreateFailed("任务超时");
    }

    /**
     * 地址拼接
     * @param Prefix 地址标头
     * @param num 地址偏移量
     * @param StartAdd 起始地址
     * @return 例如：M6.6=GetSiemensBitSingleAdd("M",15,5)
     */
    public static String GetSiemensBitSingleAdd(String Prefix, int num, int StartAdd)
    {
        String result = "";
        if (num > 0) {
            int FirstAdd = num / 8;
            int EndAdd = num % 8;
            if (EndAdd == 0)
            {
                FirstAdd--;
                EndAdd = 7;
            }
            else EndAdd--;
            result =Prefix+(FirstAdd + StartAdd)+"."+ EndAdd;
            return result;
        }
        return result;
    }


    /**
     * 整形数据缩放
     * @param InputValue 需要缩放的值
     * @param InputMax 需要缩放的最大值
     * @param InputMin 需要缩放的最小值
     * @param OutMax 缩放后的最大值
     * @param OutMin 缩放后的最下值
     * @return
     */
    public static int Scale( int InputValue, int InputMax, int InputMin, int OutMax, int OutMin)
    {
        int value = ((OutMax - OutMin) * (InputValue - InputMin)) / (InputMax - InputMin) + OutMin;
        return value;
    }

    /**
     * 浮点数据缩放
     * @param InputValue 需要缩放的值
     * @param InputMax 需要缩放的最大值
     * @param InputMin 需要缩放的最小值
     * @param OutMax 缩放后的最大值
     * @param OutMin 缩放后的最下值
     * @return
     */
    public static float Scale( float InputValue, float InputMax, float InputMin, float OutMax, float OutMin)
    {
        MessageLog.ShowInfo("AnalogConvert measureCookTime InputValue="+InputValue+" InputMax="+InputMax+";InputMin="+InputMin+";OutMax="+OutMax+";OutMin="+OutMin);

        if(InputValue<=0|| InputMax<=0||InputMin<=0){
            return 0;
        }
        if(((InputMax - InputMin) + OutMin)==0){
            return 0;
        }
        float value = ((OutMax - OutMin) * (InputValue - InputMin)) / (InputMax - InputMin) + OutMin;
        if(value<=0){
            value = 0;
        }
        String formattedNum = String.format("%.2f", value);
        return Float.parseFloat(formattedNum);
    }

}
