"""The bluetooth integration utilities."""
from __future__ import annotations

from bluetooth_adapters import BluetoothAdapters
from bluetooth_auto_recovery import recover_adapter

from homeassistant.core import callback
from homeassistant.util.dt import monotonic_time_coarse

from .models import BluetoothServiceInfoBleak


@callback
def async_load_history_from_system(
    adapters: BluetoothAdapters,
) -> dict[str, BluetoothServiceInfoBleak]:
    """Load the device and advertisement_data history if available on the current system."""
    now = monotonic_time_coarse()
    return {
        address: BluetoothServiceInfoBleak(
            name=history.advertisement_data.local_name
            or history.device.name
            or history.device.address,
            address=history.device.address,
            rssi=history.advertisement_data.rssi,
            manufacturer_data=history.advertisement_data.manufacturer_data,
            service_data=history.advertisement_data.service_data,
            service_uuids=history.advertisement_data.service_uuids,
            source=history.source,
            device=history.device,
            advertisement=history.advertisement_data,
            connectable=False,
            time=now,
        )
        for address, history in adapters.history.items()
    }


async def async_reset_adapter(adapter: str | None, mac_address: str) -> bool | None:
    """Reset the adapter."""
    if adapter and adapter.startswith("hci"):
        adapter_id = int(adapter[3:])
        return await recover_adapter(adapter_id, mac_address)
    return False
