# WARNING: Please don't edit this file. It was generated by Python/WinRT v3.1.0

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

import winrt._winrt
import winrt.system
import winrt.windows.foundation as windows_foundation

from winrt.windows.ui.xaml.interop import NotifyCollectionChangedAction, TypeKind
from winrt.windows.ui.xaml.interop import BindableVectorChangedEventHandler, NotifyCollectionChangedEventHandler

Self = typing.TypeVar('Self')

@typing.final
class TypeName:
    @_property
    def name(self) -> str: ...
    @_property
    def kind(self) -> TypeKind: ...
    def __new__(cls, name: str = "", kind: TypeKind = TypeKind(0)) -> TypeName: ...
    def __replace__(self, /, **changes: typing.Any) -> TypeName: ...
    def unpack(self) -> typing.Tuple[str, TypeKind]: ...

class NotifyCollectionChangedEventArgs_Static(winrt._winrt.IInspectable_Static):
    pass

class NotifyCollectionChangedEventArgs(winrt.system.Object, metaclass=NotifyCollectionChangedEventArgs_Static):
    def __new__(cls: typing.Type[Self], action: NotifyCollectionChangedAction, new_items: IBindableVector, old_items: IBindableVector, new_index: winrt.system.Int32, old_index: winrt.system.Int32) -> Self: ...
    # Windows.UI.Xaml.Interop.NotifyCollectionChangedAction Windows.UI.Xaml.Interop.NotifyCollectionChangedEventArgs::get_Action()
    @_property
    @typing.final
    def action(self) -> NotifyCollectionChangedAction: ...
    # Windows.UI.Xaml.Interop.IBindableVector Windows.UI.Xaml.Interop.NotifyCollectionChangedEventArgs::get_NewItems()
    @_property
    @typing.final
    def new_items(self) -> IBindableVector: ...
    # System.Int32 Windows.UI.Xaml.Interop.NotifyCollectionChangedEventArgs::get_NewStartingIndex()
    @_property
    @typing.final
    def new_starting_index(self) -> winrt.system.Int32: ...
    # Windows.UI.Xaml.Interop.IBindableVector Windows.UI.Xaml.Interop.NotifyCollectionChangedEventArgs::get_OldItems()
    @_property
    @typing.final
    def old_items(self) -> IBindableVector: ...
    # System.Int32 Windows.UI.Xaml.Interop.NotifyCollectionChangedEventArgs::get_OldStartingIndex()
    @_property
    @typing.final
    def old_starting_index(self) -> winrt.system.Int32: ...

@typing.final
class _IBindableIterable: ...

class IBindableIterable(winrt._winrt.IInspectable):
    # Windows.UI.Xaml.Interop.IBindableIterator Windows.UI.Xaml.Interop.IBindableIterable::First()
    @abstractmethod
    def first(self) -> IBindableIterator: ...

@typing.final
class _IBindableIterator: ...

class IBindableIterator(winrt._winrt.IInspectable):
    # System.Boolean Windows.UI.Xaml.Interop.IBindableIterator::MoveNext()
    @abstractmethod
    def move_next(self) -> bool: ...
    # System.Object Windows.UI.Xaml.Interop.IBindableIterator::get_Current()
    @_property
    @abstractmethod
    def current(self) -> winrt.system.Object: ...
    # System.Boolean Windows.UI.Xaml.Interop.IBindableIterator::get_HasCurrent()
    @_property
    @abstractmethod
    def has_current(self) -> bool: ...

@typing.final
class _IBindableObservableVector: ...

class IBindableObservableVector(IBindableVector, IBindableIterable, winrt._winrt.IInspectable):
    # Windows.Foundation.EventRegistrationToken Windows.UI.Xaml.Interop.IBindableObservableVector::add_VectorChanged(Windows.UI.Xaml.Interop.BindableVectorChangedEventHandler)
    @abstractmethod
    def add_vector_changed(self, handler: BindableVectorChangedEventHandler, /) -> windows_foundation.EventRegistrationToken: ...
    # System.Void Windows.UI.Xaml.Interop.IBindableObservableVector::remove_VectorChanged(Windows.Foundation.EventRegistrationToken)
    @abstractmethod
    def remove_vector_changed(self, token: typing.Union[windows_foundation.EventRegistrationToken, typing.Tuple[winrt.system.Int64]], /) -> None: ...

@typing.final
class _IBindableVector: ...

class IBindableVector(IBindableIterable, winrt._winrt.IInspectable):
    # System.Void Windows.UI.Xaml.Interop.IBindableVector::Append(System.Object)
    @abstractmethod
    def append(self, value: winrt.system.Object, /) -> None: ...
    # System.Void Windows.UI.Xaml.Interop.IBindableVector::Clear()
    @abstractmethod
    def clear(self) -> None: ...
    # System.Object Windows.UI.Xaml.Interop.IBindableVector::GetAt(System.UInt32)
    @abstractmethod
    def get_at(self, index: winrt.system.UInt32, /) -> winrt.system.Object: ...
    # Windows.UI.Xaml.Interop.IBindableVectorView Windows.UI.Xaml.Interop.IBindableVector::GetView()
    @abstractmethod
    def get_view(self) -> IBindableVectorView: ...
    # System.Boolean Windows.UI.Xaml.Interop.IBindableVector::IndexOf(System.Object,System.UInt32&)
    @abstractmethod
    def index_of(self, value: winrt.system.Object, /) -> typing.Tuple[bool, winrt.system.UInt32]: ...
    # System.Void Windows.UI.Xaml.Interop.IBindableVector::InsertAt(System.UInt32,System.Object)
    @abstractmethod
    def insert_at(self, index: winrt.system.UInt32, value: winrt.system.Object, /) -> None: ...
    # System.Void Windows.UI.Xaml.Interop.IBindableVector::RemoveAt(System.UInt32)
    @abstractmethod
    def remove_at(self, index: winrt.system.UInt32, /) -> None: ...
    # System.Void Windows.UI.Xaml.Interop.IBindableVector::RemoveAtEnd()
    @abstractmethod
    def remove_at_end(self) -> None: ...
    # System.Void Windows.UI.Xaml.Interop.IBindableVector::SetAt(System.UInt32,System.Object)
    @abstractmethod
    def set_at(self, index: winrt.system.UInt32, value: winrt.system.Object, /) -> None: ...
    # System.UInt32 Windows.UI.Xaml.Interop.IBindableVector::get_Size()
    @_property
    @abstractmethod
    def size(self) -> winrt.system.UInt32: ...

@typing.final
class _IBindableVectorView: ...

class IBindableVectorView(IBindableIterable, winrt._winrt.IInspectable):
    # System.Object Windows.UI.Xaml.Interop.IBindableVectorView::GetAt(System.UInt32)
    @abstractmethod
    def get_at(self, index: winrt.system.UInt32, /) -> winrt.system.Object: ...
    # System.Boolean Windows.UI.Xaml.Interop.IBindableVectorView::IndexOf(System.Object,System.UInt32&)
    @abstractmethod
    def index_of(self, value: winrt.system.Object, /) -> typing.Tuple[bool, winrt.system.UInt32]: ...
    # System.UInt32 Windows.UI.Xaml.Interop.IBindableVectorView::get_Size()
    @_property
    @abstractmethod
    def size(self) -> winrt.system.UInt32: ...

@typing.final
class _INotifyCollectionChanged: ...

class INotifyCollectionChanged(winrt._winrt.IInspectable):
    # Windows.Foundation.EventRegistrationToken Windows.UI.Xaml.Interop.INotifyCollectionChanged::add_CollectionChanged(Windows.UI.Xaml.Interop.NotifyCollectionChangedEventHandler)
    @abstractmethod
    def add_collection_changed(self, handler: NotifyCollectionChangedEventHandler, /) -> windows_foundation.EventRegistrationToken: ...
    # System.Void Windows.UI.Xaml.Interop.INotifyCollectionChanged::remove_CollectionChanged(Windows.Foundation.EventRegistrationToken)
    @abstractmethod
    def remove_collection_changed(self, token: typing.Union[windows_foundation.EventRegistrationToken, typing.Tuple[winrt.system.Int64]], /) -> None: ...

