# WARNING: Please don't edit this file. It was generated by Python/WinRT v2.0.0-beta.1

import datetime
import sys
import types
import typing
import uuid as _uuid
from builtins import property as _property

import winrt._winrt
import winrt.system
import winrt.windows.devices.enumeration
import winrt.windows.foundation
import winrt.windows.foundation.collections

from winrt.windows.devices.enumeration.pnp import PnpObjectType

Self = typing.TypeVar('Self')

class PnpObject_Static(type):
    def create_from_id_async(cls, type: PnpObjectType, id: str, requested_properties: typing.Iterable[str], /) -> winrt.windows.foundation.IAsyncOperation[PnpObject]: ...
    @typing.overload
    def create_watcher(cls, type: PnpObjectType, requested_properties: typing.Iterable[str], /) -> typing.Optional[PnpObjectWatcher]: ...
    @typing.overload
    def create_watcher(cls, type: PnpObjectType, requested_properties: typing.Iterable[str], aqs_filter: str, /) -> typing.Optional[PnpObjectWatcher]: ...
    @typing.overload
    def find_all_async(cls, type: PnpObjectType, requested_properties: typing.Iterable[str], /) -> winrt.windows.foundation.IAsyncOperation[PnpObjectCollection]: ...
    @typing.overload
    def find_all_async(cls, type: PnpObjectType, requested_properties: typing.Iterable[str], aqs_filter: str, /) -> winrt.windows.foundation.IAsyncOperation[PnpObjectCollection]: ...

class PnpObject(winrt.system.Object, metaclass=PnpObject_Static):
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> PnpObject: ...
    def update(self, update_info: typing.Optional[PnpObjectUpdate], /) -> None: ...
    @_property
    def id(self) -> str: ...
    @_property
    def properties(self) -> typing.Optional[winrt.windows.foundation.collections.IMapView[str, winrt.system.Object]]: ...
    @_property
    def type(self) -> PnpObjectType: ...

class PnpObjectCollection(winrt.system.Object, winrt._winrt.Sequence[PnpObject]):
    def __len__(self) -> int: ...
    @typing.overload
    def __getitem__(self, index: int) -> PnpObject: ...
    @typing.overload
    def __getitem__(self, index: slice) -> winrt.system.Array[PnpObject]: ...
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> PnpObjectCollection: ...
    def first(self) -> typing.Optional[winrt.windows.foundation.collections.IIterator[PnpObject]]: ...
    def get_at(self, index: winrt.system.UInt32, /) -> typing.Optional[PnpObject]: ...
    def get_many(self, start_index: winrt.system.UInt32, items: winrt.system.Array[PnpObject], /) -> winrt.system.UInt32: ...
    def index_of(self, value: typing.Optional[PnpObject], /) -> typing.Tuple[bool, winrt.system.UInt32]: ...
    @_property
    def size(self) -> winrt.system.UInt32: ...

class PnpObjectUpdate(winrt.system.Object):
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> PnpObjectUpdate: ...
    @_property
    def id(self) -> str: ...
    @_property
    def properties(self) -> typing.Optional[winrt.windows.foundation.collections.IMapView[str, winrt.system.Object]]: ...
    @_property
    def type(self) -> PnpObjectType: ...

class PnpObjectWatcher(winrt.system.Object):
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> PnpObjectWatcher: ...
    def start(self) -> None: ...
    def stop(self) -> None: ...
    def add_added(self, handler: winrt.windows.foundation.TypedEventHandler[PnpObjectWatcher, PnpObject], /) -> winrt.windows.foundation.EventRegistrationToken: ...
    def remove_added(self, token: winrt.windows.foundation.EventRegistrationToken, /) -> None: ...
    def add_enumeration_completed(self, handler: winrt.windows.foundation.TypedEventHandler[PnpObjectWatcher, winrt.system.Object], /) -> winrt.windows.foundation.EventRegistrationToken: ...
    def remove_enumeration_completed(self, token: winrt.windows.foundation.EventRegistrationToken, /) -> None: ...
    def add_removed(self, handler: winrt.windows.foundation.TypedEventHandler[PnpObjectWatcher, PnpObjectUpdate], /) -> winrt.windows.foundation.EventRegistrationToken: ...
    def remove_removed(self, token: winrt.windows.foundation.EventRegistrationToken, /) -> None: ...
    def add_stopped(self, handler: winrt.windows.foundation.TypedEventHandler[PnpObjectWatcher, winrt.system.Object], /) -> winrt.windows.foundation.EventRegistrationToken: ...
    def remove_stopped(self, token: winrt.windows.foundation.EventRegistrationToken, /) -> None: ...
    def add_updated(self, handler: winrt.windows.foundation.TypedEventHandler[PnpObjectWatcher, PnpObjectUpdate], /) -> winrt.windows.foundation.EventRegistrationToken: ...
    def remove_updated(self, token: winrt.windows.foundation.EventRegistrationToken, /) -> None: ...
    @_property
    def status(self) -> winrt.windows.devices.enumeration.DeviceWatcherStatus: ...

