from .const import SUPPORT_ALARM_ARM_AWAY as SUPPORT_ALARM_ARM_AWAY, SUPPORT_ALARM_ARM_CUSTOM_BYPASS as SUPPORT_ALARM_ARM_CUSTOM_BYPASS, SUPPORT_ALARM_ARM_HOME as SUPPORT_ALARM_ARM_HOME, SUPPORT_ALARM_ARM_NIGHT as SUPPORT_ALARM_ARM_NIGHT, SUPPORT_ALARM_ARM_VACATION as SUPPORT_ALARM_ARM_VACATION, SUPPORT_ALARM_TRIGGER as SUPPORT_ALARM_TRIGGER
from homeassistant.config_entries import ConfigEntry as ConfigEntry
from homeassistant.const import ATTR_CODE as ATTR_CODE, ATTR_CODE_FORMAT as ATTR_CODE_FORMAT, SERVICE_ALARM_ARM_AWAY as SERVICE_ALARM_ARM_AWAY, SERVICE_ALARM_ARM_CUSTOM_BYPASS as SERVICE_ALARM_ARM_CUSTOM_BYPASS, SERVICE_ALARM_ARM_HOME as SERVICE_ALARM_ARM_HOME, SERVICE_ALARM_ARM_NIGHT as SERVICE_ALARM_ARM_NIGHT, SERVICE_ALARM_ARM_VACATION as SERVICE_ALARM_ARM_VACATION, SERVICE_ALARM_DISARM as SERVICE_ALARM_DISARM, SERVICE_ALARM_TRIGGER as SERVICE_ALARM_TRIGGER
from homeassistant.core import HomeAssistant as HomeAssistant
from homeassistant.helpers.config_validation import make_entity_service_schema as make_entity_service_schema
from homeassistant.helpers.entity import Entity as Entity, EntityDescription as EntityDescription
from homeassistant.helpers.entity_component import EntityComponent as EntityComponent
from homeassistant.helpers.typing import ConfigType as ConfigType
from typing import Any, Final

_LOGGER: Final[Any]
DOMAIN: Final[str]
SCAN_INTERVAL: Final[Any]
ATTR_CHANGED_BY: Final[str]
FORMAT_TEXT: Final[str]
FORMAT_NUMBER: Final[str]
ATTR_CODE_ARM_REQUIRED: Final[str]
ENTITY_ID_FORMAT: Final[Any]
ALARM_SERVICE_SCHEMA: Final[Any]
PLATFORM_SCHEMA: Final[Any]
PLATFORM_SCHEMA_BASE: Final[Any]

async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: ...
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: ...
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: ...

class AlarmControlPanelEntityDescription(EntityDescription): ...

class AlarmControlPanelEntity(Entity):
    entity_description: AlarmControlPanelEntityDescription
    _attr_changed_by: Union[str, None]
    _attr_code_arm_required: bool
    _attr_code_format: Union[str, None]
    _attr_supported_features: int
    @property
    def code_format(self) -> Union[str, None]: ...
    @property
    def changed_by(self) -> Union[str, None]: ...
    @property
    def code_arm_required(self) -> bool: ...
    def alarm_disarm(self, code: Union[str, None] = ...) -> None: ...
    async def async_alarm_disarm(self, code: Union[str, None] = ...) -> None: ...
    def alarm_arm_home(self, code: Union[str, None] = ...) -> None: ...
    async def async_alarm_arm_home(self, code: Union[str, None] = ...) -> None: ...
    def alarm_arm_away(self, code: Union[str, None] = ...) -> None: ...
    async def async_alarm_arm_away(self, code: Union[str, None] = ...) -> None: ...
    def alarm_arm_night(self, code: Union[str, None] = ...) -> None: ...
    async def async_alarm_arm_night(self, code: Union[str, None] = ...) -> None: ...
    def alarm_arm_vacation(self, code: Union[str, None] = ...) -> None: ...
    async def async_alarm_arm_vacation(self, code: Union[str, None] = ...) -> None: ...
    def alarm_trigger(self, code: Union[str, None] = ...) -> None: ...
    async def async_alarm_trigger(self, code: Union[str, None] = ...) -> None: ...
    def alarm_arm_custom_bypass(self, code: Union[str, None] = ...) -> None: ...
    async def async_alarm_arm_custom_bypass(self, code: Union[str, None] = ...) -> None: ...
    @property
    def supported_features(self) -> int: ...
    @property
    def state_attributes(self) -> Union[dict[str, Any], None]: ...

class AlarmControlPanel(AlarmControlPanelEntity):
    def __init_subclass__(cls, **kwargs: Any) -> None: ...
