from .const import CONF_FOLDER as CONF_FOLDER, CONF_PATTERNS as CONF_PATTERNS, DOMAIN as DOMAIN, PLATFORMS as PLATFORMS
from _typeshed import Incomplete
from homeassistant.config_entries import ConfigEntry as ConfigEntry
from homeassistant.const import EVENT_HOMEASSISTANT_START as EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP as EVENT_HOMEASSISTANT_STOP
from homeassistant.core import Event as Event, HomeAssistant as HomeAssistant
from homeassistant.helpers.dispatcher import dispatcher_send as dispatcher_send
from homeassistant.helpers.issue_registry import IssueSeverity as IssueSeverity, async_create_issue as async_create_issue
from watchdog.events import DirCreatedEvent as DirCreatedEvent, DirDeletedEvent as DirDeletedEvent, DirModifiedEvent as DirModifiedEvent, DirMovedEvent as DirMovedEvent, FileClosedEvent as FileClosedEvent, FileCreatedEvent as FileCreatedEvent, FileDeletedEvent as FileDeletedEvent, FileModifiedEvent as FileModifiedEvent, FileMovedEvent as FileMovedEvent, FileSystemEvent as FileSystemEvent, PatternMatchingEventHandler

_LOGGER: Incomplete

async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: ...
def create_event_handler(patterns: list[str], hass: HomeAssistant, entry_id: str) -> EventHandler: ...

class EventHandler(PatternMatchingEventHandler):
    hass: Incomplete
    entry_id: Incomplete
    def __init__(self, patterns: list[str], hass: HomeAssistant, entry_id: str) -> None: ...
    def process(self, event: FileSystemEvent, moved: bool = False) -> None: ...
    def on_modified(self, event: DirModifiedEvent | FileModifiedEvent) -> None: ...
    def on_moved(self, event: DirMovedEvent | FileMovedEvent) -> None: ...
    def on_created(self, event: DirCreatedEvent | FileCreatedEvent) -> None: ...
    def on_deleted(self, event: DirDeletedEvent | FileDeletedEvent) -> None: ...
    def on_closed(self, event: FileClosedEvent) -> None: ...

class Watcher:
    _observer: Incomplete
    def __init__(self, path: str, patterns: list[str], hass: HomeAssistant, entry_id: str) -> None: ...
    def startup(self, event: Event | None) -> None: ...
    def shutdown(self, event: Event | None) -> None: ...
