// Path: src/main/java/org/sputnikdev/bluetooth/manager/auth/AuthenticationProvider.java
// @FunctionalInterface
// public interface AuthenticationProvider {
// 
//     void authenticate(BluetoothManager bluetoothManager, DeviceGovernor governor);
// 
// }


import org.sputnikdev.bluetooth.Filter;
import org.sputnikdev.bluetooth.URL;
import org.sputnikdev.bluetooth.manager.auth.AuthenticationProvider;
import java.time.Instant;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;
import java.util.function.Function;
     * @return a list of characteristic URLs of the device
     * @throws NotReadyException if the device object is not ready
     */
    List<URL> getCharacteristics() throws NotReadyException;

    /**
     * Returns a list of characteristic governors associated to the device.
     * @return a list of characteristic governors associated to the device
     * @throws NotReadyException if the device object is not ready
     */
    List<CharacteristicGovernor> getCharacteristicGovernors() throws NotReadyException;

    /**
     * Returns advertised manufacturer data. The key is manufacturer ID, the value is manufacturer data.
     * @return advertised manufacturer data
     */
    Map<Short, byte[]> getManufacturerData();

    /**
     * Returns advertised service data. The key is service UUID (16, 32 or 128 bit UUID), the value is service data.
     * @return advertised service data
     */
    Map<URL, byte[]> getServiceData();

    /**
     * Returns the date/time of last known advertised packet.
     * @return the date/time of last known advertised packet
     */
    Instant getLastAdvertised();

// Path: src/main/java/org/sputnikdev/bluetooth/manager/auth/AuthenticationProvider.java
// @FunctionalInterface
// public interface AuthenticationProvider {
// 
//     void authenticate(BluetoothManager bluetoothManager, DeviceGovernor governor);
// 
// }


// Path: src/main/java/org/sputnikdev/bluetooth/manager/DeviceGovernor.java
import org.sputnikdev.bluetooth.Filter;
import org.sputnikdev.bluetooth.URL;
import org.sputnikdev.bluetooth.manager.auth.AuthenticationProvider;
import java.time.Instant;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;
import java.util.function.Function;

     * @return a list of characteristic URLs of the device
     * @throws NotReadyException if the device object is not ready
     */
    List<URL> getCharacteristics() throws NotReadyException;

    /**
     * Returns a list of characteristic governors associated to the device.
     * @return a list of characteristic governors associated to the device
     * @throws NotReadyException if the device object is not ready
     */
    List<CharacteristicGovernor> getCharacteristicGovernors() throws NotReadyException;

    /**
     * Returns advertised manufacturer data. The key is manufacturer ID, the value is manufacturer data.
     * @return advertised manufacturer data
     */
    Map<Short, byte[]> getManufacturerData();

    /**
     * Returns advertised service data. The key is service UUID (16, 32 or 128 bit UUID), the value is service data.
     * @return advertised service data
     */
    Map<URL, byte[]> getServiceData();

    /**
     * Returns the date/time of last known advertised packet.
     * @return the date/time of last known advertised packet
     */
    Instant getLastAdvertised();

    void setAuthenticationProvider(AuthenticationProvider authenticationProvider);