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

import enum
import datetime
import sys
import types
import typing

import winsdk._winrt as _winrt
import winsdk.windows.foundation
import winsdk.windows.foundation.collections
import winsdk.windows.storage.streams
import winsdk.windows.system
import winsdk.windows.ui.notifications

class PushNotificationType(enum.IntEnum):
    TOAST = 0
    TILE = 1
    BADGE = 2
    RAW = 3
    TILE_FLYOUT = 4

Self = typing.TypeVar('Self')

class PushNotificationChannel(_winrt.Object):
    expiration_time: datetime.datetime
    uri: str
    @staticmethod
    def _from(obj: _winrt.Object) -> PushNotificationChannel: ...
    def close(self) -> None: ...
    def add_push_notification_received(self, handler: winsdk.windows.foundation.TypedEventHandler[PushNotificationChannel, PushNotificationReceivedEventArgs]) -> winsdk.windows.foundation.EventRegistrationToken: ...
    def remove_push_notification_received(self, token: winsdk.windows.foundation.EventRegistrationToken) -> None: ...

class PushNotificationChannelManager(_winrt.Object):
    @staticmethod
    def _from(obj: _winrt.Object) -> PushNotificationChannelManager: ...
    @typing.overload
    @staticmethod
    def create_push_notification_channel_for_application_async() -> winsdk.windows.foundation.IAsyncOperation[PushNotificationChannel]: ...
    @typing.overload
    @staticmethod
    def create_push_notification_channel_for_application_async(application_id: str) -> winsdk.windows.foundation.IAsyncOperation[PushNotificationChannel]: ...
    @staticmethod
    def create_push_notification_channel_for_secondary_tile_async(tile_id: str) -> winsdk.windows.foundation.IAsyncOperation[PushNotificationChannel]: ...
    @staticmethod
    def get_default() -> typing.Optional[PushNotificationChannelManagerForUser]: ...
    @staticmethod
    def get_for_user(user: typing.Optional[winsdk.windows.system.User]) -> typing.Optional[PushNotificationChannelManagerForUser]: ...
    @staticmethod
    def add_channels_revoked(handler: winsdk.windows.foundation.EventHandler[PushNotificationChannelsRevokedEventArgs]) -> winsdk.windows.foundation.EventRegistrationToken: ...
    @staticmethod
    def remove_channels_revoked(token: winsdk.windows.foundation.EventRegistrationToken) -> None: ...

class PushNotificationChannelManagerForUser(_winrt.Object):
    user: typing.Optional[winsdk.windows.system.User]
    @staticmethod
    def _from(obj: _winrt.Object) -> PushNotificationChannelManagerForUser: ...
    @typing.overload
    def create_push_notification_channel_for_application_async(self) -> winsdk.windows.foundation.IAsyncOperation[PushNotificationChannel]: ...
    @typing.overload
    def create_push_notification_channel_for_application_async(self, application_id: str) -> winsdk.windows.foundation.IAsyncOperation[PushNotificationChannel]: ...
    def create_push_notification_channel_for_secondary_tile_async(self, tile_id: str) -> winsdk.windows.foundation.IAsyncOperation[PushNotificationChannel]: ...
    @typing.overload
    def create_raw_push_notification_channel_with_alternate_key_for_application_async(self, app_server_key: typing.Optional[winsdk.windows.storage.streams.IBuffer], channel_id: str) -> winsdk.windows.foundation.IAsyncOperation[PushNotificationChannel]: ...
    @typing.overload
    def create_raw_push_notification_channel_with_alternate_key_for_application_async(self, app_server_key: typing.Optional[winsdk.windows.storage.streams.IBuffer], channel_id: str, app_id: str) -> winsdk.windows.foundation.IAsyncOperation[PushNotificationChannel]: ...

class PushNotificationChannelsRevokedEventArgs(_winrt.Object):
    @staticmethod
    def _from(obj: _winrt.Object) -> PushNotificationChannelsRevokedEventArgs: ...

class PushNotificationReceivedEventArgs(_winrt.Object):
    cancel: _winrt.Boolean
    badge_notification: typing.Optional[winsdk.windows.ui.notifications.BadgeNotification]
    notification_type: PushNotificationType
    raw_notification: typing.Optional[RawNotification]
    tile_notification: typing.Optional[winsdk.windows.ui.notifications.TileNotification]
    toast_notification: typing.Optional[winsdk.windows.ui.notifications.ToastNotification]
    @staticmethod
    def _from(obj: _winrt.Object) -> PushNotificationReceivedEventArgs: ...

class RawNotification(_winrt.Object):
    content: str
    channel_id: str
    headers: typing.Optional[winsdk.windows.foundation.collections.IMapView[str, str]]
    content_bytes: typing.Optional[winsdk.windows.storage.streams.IBuffer]
    @staticmethod
    def _from(obj: _winrt.Object) -> RawNotification: ...

