package com.roc.printqr;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;

import android.os.Handler;
import android.os.Message;
import android.util.Log;


import com.android.print.sdk.PrinterConstants;
import com.android.print.sdk.PrinterInstance;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;

import java.util.Set;

public class PrintQrModule extends ReactContextBaseJavaModule {
    public final static int NAME_CHANG = 104;
    public PrinterInstance mPrinter = null;
    private BluetoothAdapter mBluetoothAdapter = null;
    final ReactApplicationContext ctx;
    public PrintQrModule(ReactApplicationContext reactContext) {
        super(reactContext);
        ctx = reactContext;

    }
    public String getName() {
        return "PrintQr";
    }
    @ReactMethod
    public void print(final String deviceName,final String deviceCode,final String qrCode,final Callback c) {
        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        Set<BluetoothDevice> bondedDevices = mBluetoothAdapter.getBondedDevices();
        if(mPrinter==null||!mPrinter.isConnected()){
            if(bondedDevices.size()>0){
                Log.w("Connect Status","有配对的");
                mPrinter=new PrinterInstance(getCurrentActivity().getApplicationContext(), bondedDevices.iterator().next(), new Handler() {
                    @Override
                    public void handleMessage(Message msg) {
                        switch (msg.what) {
                            case PrinterConstants.Connect.SUCCESS://成功
                                Log.w("Connect Status",mPrinter.isConnected()+"");
                                c.invoke(print(deviceName, deviceCode, qrCode));
                                break;
                            case PrinterConstants.Connect.FAILED://失败
                                Log.w("Connect Status",mPrinter.isConnected()+"");
                                mPrinter.closeConnection();
                                c.invoke(0);
                                break;
                            case PrinterConstants.Connect.CLOSED://关闭
                                mPrinter.closeConnection();
                                c.invoke(0);
                                break;
                        }
                    }
                });
                mPrinter.openConnection();
            }else{
                c.invoke(0);
            }
        }else{
            c.invoke(print(deviceName, deviceCode, qrCode));
            Log.w("Connect Status",mPrinter.isConnected()+"");
        }
    }
    private int print(String deviceName,String deviceCode,String qrCode){
        try{
            byte[] data = new StringBuilder().append("SIZE ").append(40 + " mm").append(",")
                    .append(30 + " mm").append("\r\n").toString().getBytes();
            int re=mPrinter.sendByteData(data);
            if(re!=0){return 0;}
            mPrinter.sendByteData("CLS\r\n".getBytes());
            mPrinter.sendByteData("GAP 2 mm,0 mm\r\n".getBytes());
            mPrinter.sendByteData("HOME\r\n".getBytes());
            mPrinter.sendByteData(("TEXT 20,200,\"0\",270,1,1,\""+deviceName+"\"\r\n").getBytes("GBK"));
            mPrinter.sendByteData(("QRCODE 60,200,M,7,M,270,M1,S1,\""+qrCode+"\"\r\n").getBytes("GBK"));
            mPrinter.sendByteData(("TEXT 250,200,\"0\",270,1,1,\""+deviceCode+"\"\r\n").getBytes("GBK"));
            mPrinter.sendByteData(("PRINT " + 1 + "," + 1 + "\r\n").getBytes());//用于打印出缓冲区的数据
            return 1;
        }catch (Exception e){
            return 0;
        }


    }
}
