from __future__ import annotations

import typing

import zigpy.types as t

if typing.TYPE_CHECKING:
    from zigpy.config import CONF_OTA_PROVIDER_TYPE

CONF_OTA_PROVIDER_TYPE = "type"

CONF_DEVICE_BAUDRATE_DEFAULT = 115200
CONF_DEVICE_FLOW_CONTROL_DEFAULT = None
CONF_MAX_CONCURRENT_REQUESTS_DEFAULT = 8
CONF_NWK_BACKUP_ENABLED_DEFAULT = True
CONF_NWK_BACKUP_PERIOD_DEFAULT = 24 * 60  # 24 hours
CONF_NWK_CHANNEL_DEFAULT = None
CONF_NWK_CHANNELS_DEFAULT = [11, 15, 20, 25]
CONF_NWK_COUNTRY_CODE_DEFAULT = None
CONF_NWK_EXTENDED_PAN_ID_DEFAULT = None
CONF_NWK_PAN_ID_DEFAULT = None
CONF_NWK_KEY_DEFAULT = None
CONF_NWK_KEY_SEQ_DEFAULT = 0x00
CONF_NWK_TC_ADDRESS_DEFAULT = None
CONF_NWK_TC_LINK_KEY_DEFAULT = t.KeyData(b"ZigBeeAlliance09")
CONF_NWK_TX_POWER_DEFAULT = None  # By default, we pick it automatically
CONF_NWK_TX_POWER_MAXIMUM_DEFAULT = 20  # No radio supports higher than this
CONF_NWK_TX_POWER_SAFE = 8  # Safe in all regulatory regions
CONF_NWK_UPDATE_ID_DEFAULT = 0x00
CONF_NWK_VALIDATE_SETTINGS_DEFAULT = False
CONF_OTA_ENABLED_DEFAULT = True
CONF_OTA_DISABLE_DEFAULT_PROVIDERS_DEFAULT: list[str] = []
CONF_OTA_BROADCAST_ENABLED_DEFAULT = True
CONF_OTA_BROADCAST_INITIAL_DELAY_DEFAULT = 3.9 * 60 * 60  # 3.9 hours
CONF_OTA_BROADCAST_INTERVAL_DEFAULT = 3.9 * 60 * 60  # 3.9 hours
CONF_OTA_PROVIDERS_DEFAULT = [
    {
        CONF_OTA_PROVIDER_TYPE: "zigpy_ota",
    },
    {
        CONF_OTA_PROVIDER_TYPE: "ledvance",
    },
    {
        CONF_OTA_PROVIDER_TYPE: "sonoff",
    },
]
CONF_OTA_EXTRA_PROVIDERS_DEFAULT: list[dict[str, typing.Any]] = []
CONF_SOURCE_ROUTING_DEFAULT = False
CONF_TOPO_SCAN_PERIOD_DEFAULT = 4 * 60  # 4 hours
CONF_TOPO_SCAN_ENABLED_DEFAULT = True
CONF_TOPO_SKIP_COORDINATOR_DEFAULT = False
CONF_WATCHDOG_ENABLED_DEFAULT = True
CONF_CONCURRENCY_DEFAULT = {
    t.PacketPriority.HIGH.name.lower(): 0.25,
    t.PacketPriority.NORMAL.name.lower(): 0.50,
    t.PacketPriority.LOW.name.lower(): 0.25,
}
