package com.quenice.idcard.utils;

import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;

import kernal.idcard.android.RecogParameterMessage;
import kernal.idcard.android.RecogService;
import kernal.idcard.android.ResultMessage;
import kernal.idcard.camera.CardOcrRecogConfigure;
import kernal.idcard.camera.IBaseReturnMessage;

/**
 * Time:2018/12/20
 * Author:A@H
 * Description: 和相机不在同一界面的导入图片识别
 */
public class ImportRecog {

    private Context context;
    private int ReturnAuthority;
    public RecogService.recogBinder recogBinder;
    private int nMainId=2;
    private int nSubId=0;
    private volatile IBaseReturnMessage iBaseReturnMessage;
    private String selectPath="";
    private String cutSavePath="";
    private String HeadPicPath="";
    public ImportRecog(Context context,IBaseReturnMessage iBaseReturnMessage){
        this.context=context;
        this.iBaseReturnMessage=iBaseReturnMessage;
    }
    public void setiBaseReturnMessage(IBaseReturnMessage iBaseReturnMessage) {
        this.iBaseReturnMessage = iBaseReturnMessage;
    }


    public ServiceConnection recogConn = new ServiceConnection() {

        @Override
        public void onServiceDisconnected(ComponentName name) {
            recogBinder = null;
        }

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {

            recogBinder = (RecogService.recogBinder) service;
            if(recogBinder!=null) {
                RecogParameterMessage rpm = new RecogParameterMessage();
                rpm.nTypeLoadImageToMemory = 0;
                rpm.nMainID =nMainId;
                rpm.nSubID[0] = nSubId;
                rpm.GetSubID = true;
                rpm.GetVersionInfo = true;
                rpm.logo = "";
                rpm.userdata = "";
                rpm.sn = "";
                rpm.authfile = "";
                rpm.isCut = true;
                rpm.triggertype = 0;
                rpm.devcode = Devcode.devcode;
                rpm.isSetIDCardRejectType=CardOcrRecogConfigure.getInstance().isSetIDCardRejectType;
                //nProcessType：0- deleting all instructions 1- cropping 2- rotation  3- cropping and rotation
                // 4- tilt correction 5- cropping+ tilt correction 6- rotation+tile correct
                // 7- cropping+rotation+tilt correction.
                rpm.nProcessType = 7;
                rpm.nSetType = 1;// nSetType: 0－Deleting operations，1－setting operations
                rpm.lpFileName = selectPath; // If rpm.lpFileName is null, auomatic recognition function will be executed.
                rpm.lpHeadFileName =HeadPicPath ;//Save portrait of identity document
                rpm.isSaveCut = CardOcrRecogConfigure.getInstance().isSaveCut;// Save cropping picture false=not saving  true=saving
                rpm.cutSavePath=cutSavePath;
                if (nMainId== 2) {
                    rpm.isAutoClassify = true;
                    rpm.isOnlyClassIDCard = true;
                } else if (nMainId== 3000) {
                    rpm.nMainID = 1034;
                }
                // end
                try {
                    ResultMessage resultMessage;
                    resultMessage = recogBinder.getRecogResult(rpm);
                    if (resultMessage.ReturnAuthority == 0
                            && resultMessage.ReturnInitIDCard == 0
                            && resultMessage.ReturnLoadImageToMemory == 0
                            && resultMessage.ReturnRecogIDCard > 0) {
                        if(iBaseReturnMessage!=null){
                            String[] picPath={selectPath,cutSavePath,HeadPicPath};
                            iBaseReturnMessage.scanOCRIdCardSuccess(resultMessage,picPath);
                        }
                    } else {
                        if(iBaseReturnMessage!=null){
                            String error=ManageIDCardRecogResult.managerErrorRecogResult(context,resultMessage);
                            iBaseReturnMessage.scanOCRIdCardError(error);
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (recogBinder != null) {
                        context.unbindService(recogConn);
                    }
                }

            }
        }
    };

    public void startImportRecogService(String selectPath){
        this.selectPath=selectPath;
        if(CardOcrRecogConfigure.getInstance().isSaveCut){
            cutSavePath=CardOcrRecogConfigure.getInstance().savePath.getCropPicPath();
        }
        if(CardOcrRecogConfigure.getInstance().isSaveHeadPic){
            HeadPicPath=CardOcrRecogConfigure.getInstance().savePath.getHeadPicPath();
        }
        nMainId=CardOcrRecogConfigure.getInstance().nMainId;
        nSubId=CardOcrRecogConfigure.getInstance().nSubID;
        RecogService.nMainID =CardOcrRecogConfigure.getInstance().nMainId;
        RecogService.isRecogByPath = true;
        Intent recogIntent = new Intent(context,
                RecogService.class);
        context.bindService(recogIntent, recogConn, Service.BIND_AUTO_CREATE);
    }
}
