package com.clickdelivery.nativebridge import android.Manifest import android.bluetooth.BluetoothAdapter import android.bluetooth.BluetoothDevice import android.content.pm.PackageManager import android.os.Build import android.util.Base64 import com.facebook.react.bridge.* import java.util.UUID class ThermalPrinterModule(private val ctx:ReactApplicationContext):ReactContextBaseJavaModule(ctx){override fun getName()="ThermalPrinter" private fun allowed()=Build.VERSION.SDK_INT<31||ctx.checkSelfPermission(Manifest.permission.BLUETOOTH_CONNECT)==PackageManager.PERMISSION_GRANTED @ReactMethod fun pairedPrinters(p:Promise){try{if(!allowed()){p.reject("BLUETOOTH_PERMISSION","BLUETOOTH_CONNECT required");return};val arr=Arguments.createArray();for(d in BluetoothAdapter.getDefaultAdapter()?.bondedDevices.orEmpty()){val m=Arguments.createMap();m.putString("name",d.name);m.putString("address",d.address);arr.pushMap(m)};p.resolve(arr)}catch(e:Exception){p.reject("BLUETOOTH_LIST",e)}} @ReactMethod fun printBase64(address:String,payload:String,p:Promise){Thread{try{if(!allowed())throw SecurityException("BLUETOOTH_CONNECT required");val adapter=BluetoothAdapter.getDefaultAdapter()?:throw IllegalStateException("Bluetooth unavailable");val device:BluetoothDevice=adapter.getRemoteDevice(address);val socket=device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));socket.connect();socket.outputStream.use{it.write(Base64.decode(payload,Base64.DEFAULT));it.flush()};socket.close();p.resolve(true)}catch(e:Exception){p.reject("THERMAL_PRINT",e)}}.start()} } class ThermalPrinterPackage:ReactPackage{override fun createNativeModules(c:ReactApplicationContext):List=emptyList();override fun createViewManagers(c:ReactApplicationContext):List> = emptyList()}