package com.shareable.beacon;

import android.bluetooth.le.AdvertiseCallback;
import android.bluetooth.le.AdvertiseSettings;
import android.os.Handler;

import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;

import org.altbeacon.beacon.Beacon;
import org.altbeacon.beacon.BeaconParser;
import org.altbeacon.beacon.BeaconTransmitter;
import org.altbeacon.beacon.Identifier;

import java.nio.charset.StandardCharsets;
import java.util.Arrays;

public class Advertise extends Beacons {
    BeaconTransmitter beaconTransmitter = null;

    public Advertise(ReactApplicationContext context) {
        super(context);
        beaconTransmitter = new BeaconTransmitter(context, cusParser);
    }

    @Override
    public void onStart() { }

    // start advertising
    @Override
    public void onStart(String message, final BeaconStates callback) {
        // extract bytes from string
        byte[] message_to_btye = message.getBytes(StandardCharsets.US_ASCII);

        // initialize our beacon to be advertised
        Beacon beacon = new Beacon.Builder().setId1(MY_MATCHING_IDENTIFIER.toString())
                .setId2(Identifier.fromBytes(message_to_btye, 0, message.length(), false).toString())
                .setTxPower(-59).setDataFields(Arrays.asList(new Long[] {0l})).build();

        beaconTransmitter.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_BALANCED);
        beaconTransmitter.setAdvertiseTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM);


        beaconTransmitter.startAdvertising(beacon, new AdvertiseCallback() {
            @Override
            public void onStartFailure(int errorCode) {
                super.onStartFailure(errorCode);
                callback.onFailure();
            }

            @Override
            public void onStartSuccess(AdvertiseSettings settingsInEffect) {
                super.onStartSuccess(settingsInEffect);
                callback.onAdvertised();
            }
        });
    }

    @Override
    public void onStop() {
        beaconTransmitter.stopAdvertising();
        beaconTransmitter = null;
    }
}
