package com.reactnativethermalprint.async;

import android.content.Context;
import com.reactnativethermalprint.escposprinter.connection.DeviceConnection;
import com.reactnativethermalprint.escposprinter.connection.bluetooth.BluetoothConnection;
import com.reactnativethermalprint.escposprinter.connection.bluetooth.BluetoothPrintersConnections;
import com.reactnativethermalprint.escposprinter.exceptions.EscPosConnectionException;
import com.facebook.react.bridge.ReactContext;

public class AsyncBluetoothEscPosPrint extends AsyncEscPosPrint {

    public AsyncBluetoothEscPosPrint(Context context, ReactContext reactContext, Configs configs, CallbackPrint callbackPrint) {
        super(context, reactContext, configs, callbackPrint);
    }

    protected Integer doInBackground(AsyncEscPosPrinter... printersData) {
        if (printersData.length == 0) {
            return AsyncEscPosPrint.FINISH_NO_PRINTER;
        }

        AsyncEscPosPrinter printerData = printersData[0];
        DeviceConnection deviceConnection = printerData.getPrinterConnection();

        this.publishProgress(AsyncEscPosPrint.PROGRESS_CONNECTING);

        if (deviceConnection == null) {
            printersData[0] = new AsyncEscPosPrinter(
                    BluetoothPrintersConnections.selectFirstPaired(),
                    printerData.getPrinterDpi(),
                    printerData.getPrinterWidthMM(),
                    printerData.getPrinterNbrCharactersPerLine()
            );
            printersData[0].setTextToPrint(printerData.getTextToPrint());
        } else {
            try {
                deviceConnection.connect();
            } catch (EscPosConnectionException e) {
                e.printStackTrace();
            }
        }

        return super.doInBackground(printersData);
    }
}
