package com.xty.common.bracelet

import android.bluetooth.BluetoothDevice
import android.bluetooth.le.ScanCallback
import android.bluetooth.le.ScanResult
import com.hjq.toast.ToastUtils
import com.xty.common.LogUtils

class MyScanCallback(var result: (deviceName: String, macAddress: String) -> Unit) :
    ScanCallback() {

    override fun onScanResult(callbackType: Int, scanResult: ScanResult?) {
        super.onScanResult(callbackType, scanResult)
        scanResult?.apply {
            device.apply {
//                if (ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_CONNECT)) {
                if (name.isNullOrEmpty() || address.isNullOrEmpty()) {
                    return
                }
                LogUtils.d("deviceName:$name;address:$address;bondState:$bondState;type:$type")
//                    checkBondState(bondState)
//                    checkBlueType(type)
                result.invoke(name, address)
//                }
            }
        }
    }

    /**
     * 连接状态
     */
    private fun checkBondState(bondState: Int) {
        when (bondState) {
            /**
             *表示远程设备未绑定（配对）。
             *没有与远程设备共享的链接密钥，因此通信
             *（如果允许的话）将是未经身份验证和未加密的。
             */
            BluetoothDevice.BOND_NONE -> {//10

            }
            //表示正在与远程设备进行绑定（配对）。
            BluetoothDevice.BOND_BONDING -> {//11

            }
            /**
             * 表示远程设备已绑定（配对）。
             *本地存在远程设备的共享链接密钥，因此
             *通信可以被认证和加密。
             *与远程设备绑定（配对）并不一定
             *表示设备当前已连接。这只是意味着
             *该过程在更早的时间完成，链接键仍在
             *本地存储，准备在下一个连接上使用。
             **/
            BluetoothDevice.BOND_BONDED -> {//12

            }
        }
    }

    /**
     * 蓝牙设备类型
     */
    private fun checkBlueType(type: Int) {
        when (type) {
            BluetoothDevice.DEVICE_TYPE_UNKNOWN -> {//蓝牙设备类型未知

            }

            BluetoothDevice.DEVICE_TYPE_CLASSIC -> {//蓝牙设备类型，经典-BR/EDR设备

            }

            BluetoothDevice.DEVICE_TYPE_LE -> {//蓝牙设备类型，低能耗-仅限LE

            }

            BluetoothDevice.DEVICE_TYPE_DUAL -> {//蓝牙设备类型，双模-BR/EDR/LE

            }
        }
    }

    override fun onBatchScanResults(results: MutableList<ScanResult>?) {
        super.onBatchScanResults(results)
    }

    override fun onScanFailed(errorCode: Int) {
        super.onScanFailed(errorCode)
        when (errorCode) {
            SCAN_FAILED_ALREADY_STARTED -> {//无法启动扫描，因为应用程序已启动具有相同设置的BLE扫描。
                "无法启动扫描，因为应用程序已启动具有相同设置的BLE扫描。"
            }

            SCAN_FAILED_APPLICATION_REGISTRATION_FAILED -> {//无法启动扫描，因为无法注册应用程序。
                ToastUtils.show("无法启动扫描，因为无法注册应用程序,请关闭蓝牙后重试。。")
            }

            SCAN_FAILED_INTERNAL_ERROR -> {//由于内部错误，无法启动扫描
                ToastUtils.show("由于蓝牙内部错误，无法启动扫描,请关闭蓝牙后重试。。")
            }

            SCAN_FAILED_FEATURE_UNSUPPORTED -> {//无法启动功率优化扫描，因为不支持此功能。
                ToastUtils.show("无法启动功率优化扫描，因为不支持此功能,请关闭蓝牙后重试。。")
            }
            5 -> {//由于硬件资源不足，无法启动扫描。
                ToastUtils.show("由于硬件资源不足，无法启动扫描,请关闭蓝牙后重试。。")
            }
            6 -> {//由于应用程序尝试扫描太频繁，无法启动扫描。
                ToastUtils.show("由于应用程序尝试扫描太频繁，无法启动扫描,请关闭蓝牙后重试。。")
            }
        }
    }
}
