declare module "windows.ui.notifications" {
  export enum NotificationSetting {
    enabled,
    disabledForApplication,
    disabledForUser,
    disabledByGroupPolicy,
    disabledByManifest,
  }

  export enum ToastDismissalReason {
    userCanceled,
    applicationHidden,
    timedOut,
  }

  export enum BadgeTemplateType {
    badgeGlyph,
    badgeNumber,
  }

  export enum TileTemplateType {
    tileSquareImage,
    tileSquareBlock,
    tileSquareText01,
    tileSquareText02,
    tileSquareText03,
    tileSquareText04,
    tileSquarePeekImageAndText01,
    tileSquarePeekImageAndText02,
    tileSquarePeekImageAndText03,
    tileSquarePeekImageAndText04,
    tileWideImage,
    tileWideImageCollection,
    tileWideImageAndText01,
    tileWideImageAndText02,
    tileWideBlockAndText01,
    tileWideBlockAndText02,
    tileWidePeekImageCollection01,
    tileWidePeekImageCollection02,
    tileWidePeekImageCollection03,
    tileWidePeekImageCollection04,
    tileWidePeekImageCollection05,
    tileWidePeekImageCollection06,
    tileWidePeekImageAndText01,
    tileWidePeekImageAndText02,
    tileWidePeekImage01,
    tileWidePeekImage02,
    tileWidePeekImage03,
    tileWidePeekImage04,
    tileWidePeekImage05,
    tileWidePeekImage06,
    tileWideSmallImageAndText01,
    tileWideSmallImageAndText02,
    tileWideSmallImageAndText03,
    tileWideSmallImageAndText04,
    tileWideSmallImageAndText05,
    tileWideText01,
    tileWideText02,
    tileWideText03,
    tileWideText04,
    tileWideText05,
    tileWideText06,
    tileWideText07,
    tileWideText08,
    tileWideText09,
    tileWideText10,
    tileWideText11,
    tileSquare150x150Image,
    tileSquare150x150Block,
    tileSquare150x150Text01,
    tileSquare150x150Text02,
    tileSquare150x150Text03,
    tileSquare150x150Text04,
    tileSquare150x150PeekImageAndText01,
    tileSquare150x150PeekImageAndText02,
    tileSquare150x150PeekImageAndText03,
    tileSquare150x150PeekImageAndText04,
    tileWide310x150Image,
    tileWide310x150ImageCollection,
    tileWide310x150ImageAndText01,
    tileWide310x150ImageAndText02,
    tileWide310x150BlockAndText01,
    tileWide310x150BlockAndText02,
    tileWide310x150PeekImageCollection01,
    tileWide310x150PeekImageCollection02,
    tileWide310x150PeekImageCollection03,
    tileWide310x150PeekImageCollection04,
    tileWide310x150PeekImageCollection05,
    tileWide310x150PeekImageCollection06,
    tileWide310x150PeekImageAndText01,
    tileWide310x150PeekImageAndText02,
    tileWide310x150PeekImage01,
    tileWide310x150PeekImage02,
    tileWide310x150PeekImage03,
    tileWide310x150PeekImage04,
    tileWide310x150PeekImage05,
    tileWide310x150PeekImage06,
    tileWide310x150SmallImageAndText01,
    tileWide310x150SmallImageAndText02,
    tileWide310x150SmallImageAndText03,
    tileWide310x150SmallImageAndText04,
    tileWide310x150SmallImageAndText05,
    tileWide310x150Text01,
    tileWide310x150Text02,
    tileWide310x150Text03,
    tileWide310x150Text04,
    tileWide310x150Text05,
    tileWide310x150Text06,
    tileWide310x150Text07,
    tileWide310x150Text08,
    tileWide310x150Text09,
    tileWide310x150Text10,
    tileWide310x150Text11,
    tileSquare310x310BlockAndText01,
    tileSquare310x310BlockAndText02,
    tileSquare310x310Image,
    tileSquare310x310ImageAndText01,
    tileSquare310x310ImageAndText02,
    tileSquare310x310ImageAndTextOverlay01,
    tileSquare310x310ImageAndTextOverlay02,
    tileSquare310x310ImageAndTextOverlay03,
    tileSquare310x310ImageCollectionAndText01,
    tileSquare310x310ImageCollectionAndText02,
    tileSquare310x310ImageCollection,
    tileSquare310x310SmallImagesAndTextList01,
    tileSquare310x310SmallImagesAndTextList02,
    tileSquare310x310SmallImagesAndTextList03,
    tileSquare310x310SmallImagesAndTextList04,
    tileSquare310x310Text01,
    tileSquare310x310Text02,
    tileSquare310x310Text03,
    tileSquare310x310Text04,
    tileSquare310x310Text05,
    tileSquare310x310Text06,
    tileSquare310x310Text07,
    tileSquare310x310Text08,
    tileSquare310x310TextList01,
    tileSquare310x310TextList02,
    tileSquare310x310TextList03,
    tileSquare310x310SmallImageAndText01,
    tileSquare310x310SmallImagesAndTextList05,
    tileSquare310x310Text09,
    tileSquare99x99IconWithBadge,
    tileSquare210x210IconWithBadge,
    tileWide432x210IconWithBadgeAndText,
  }

  export enum ToastTemplateType {
    toastImageAndText01,
    toastImageAndText02,
    toastImageAndText03,
    toastImageAndText04,
    toastText01,
    toastText02,
    toastText03,
    toastText04,
  }

  export enum PeriodicUpdateRecurrence {
    halfHour,
    hour,
    sixHours,
    twelveHours,
    daily,
  }

  export class TileUpdater {
    setting: NotificationSetting;
    constructor();

    update(notification: TileNotification): void;

    clear(): void;

    enableNotificationQueue(enable: Boolean): void;

    addToSchedule(scheduledTile: ScheduledTileNotification): void;

    removeFromSchedule(scheduledTile: ScheduledTileNotification): void;

    getScheduledTileNotifications(): Object;

    startPeriodicUpdate(tileContent: Object, requestedInterval: PeriodicUpdateRecurrence): void;
    startPeriodicUpdate(tileContent: Object, startTime: Date, requestedInterval: PeriodicUpdateRecurrence): void;

    stopPeriodicUpdate(): void;

    startPeriodicUpdateBatch(tileContents: Object, requestedInterval: PeriodicUpdateRecurrence): void;
    startPeriodicUpdateBatch(tileContents: Object, startTime: Date, requestedInterval: PeriodicUpdateRecurrence): void;

    enableNotificationQueueForSquare150x150(enable: Boolean): void;

    enableNotificationQueueForWide310x150(enable: Boolean): void;

    enableNotificationQueueForSquare310x310(enable: Boolean): void;

  }

  export class TileNotification {
    tag: String;
    expirationTime: Date;
    content: Object;
    constructor();
    constructor(content: Object);

  }

  export class ScheduledTileNotification {
    tag: String;
    id: String;
    expirationTime: Date;
    content: Object;
    deliveryTime: Date;
    constructor();
    constructor(content: Object, deliveryTime: Date);

  }

  export class BadgeUpdater {
    constructor();

    update(notification: BadgeNotification): void;

    clear(): void;

    startPeriodicUpdate(badgeContent: Object, requestedInterval: PeriodicUpdateRecurrence): void;
    startPeriodicUpdate(badgeContent: Object, startTime: Date, requestedInterval: PeriodicUpdateRecurrence): void;

    stopPeriodicUpdate(): void;

  }

  export class BadgeNotification {
    expirationTime: Date;
    content: Object;
    constructor();
    constructor(content: Object);

  }

  export class ToastNotifier {
    setting: NotificationSetting;
    constructor();

    show(notification: ToastNotification): void;

    hide(notification: ToastNotification): void;

    addToSchedule(scheduledToast: ScheduledToastNotification): void;

    removeFromSchedule(scheduledToast: ScheduledToastNotification): void;

    getScheduledToastNotifications(): Object;

  }

  export class ToastNotification {
    expirationTime: Date;
    content: Object;
    constructor();
    constructor(content: Object);

    addListener(type: "Activated", listener: (ev: Event) => void): void ;
    removeListener(type: "Activated", listener: (ev: Event) => void): void ;
    on(type: "Activated", listener: (ev: Event) => void): void ;
    off(type: "Activated", listener: (ev: Event) => void): void ;
    
    addListener(type: "Dismissed", listener: (ev: Event) => void): void ;
    removeListener(type: "Dismissed", listener: (ev: Event) => void): void ;
    on(type: "Dismissed", listener: (ev: Event) => void): void ;
    off(type: "Dismissed", listener: (ev: Event) => void): void ;
    
    addListener(type: "Failed", listener: (ev: Event) => void): void ;
    removeListener(type: "Failed", listener: (ev: Event) => void): void ;
    on(type: "Failed", listener: (ev: Event) => void): void ;
    off(type: "Failed", listener: (ev: Event) => void): void ;
    
    addListener(type: string, listener: (ev: Event) => void): void ;
    removeListener(type: string, listener: (ev: Event) => void): void ;
    on(type: string, listener: (ev: Event) => void): void ;
    off(type: string, listener: (ev: Event) => void): void ;
    

  }

  export class ScheduledToastNotification {
    id: String;
    content: Object;
    deliveryTime: Date;
    maximumSnoozeCount: Number;
    snoozeInterval: Number;
    constructor();
    constructor(content: Object, deliveryTime: Date);
    constructor(content: Object, deliveryTime: Date, snoozeInterval: Number, maximumSnoozeCount: Number);

  }

  export class ToastDismissedEventArgs {
    reason: ToastDismissalReason;
    constructor();

  }

  export class ToastFailedEventArgs {
    errorCode: Number;
    constructor();

  }

  export class TileUpdateManager {
    constructor();

    static createTileUpdaterForApplication(): TileUpdater;
    static createTileUpdaterForApplication(applicationId: String): TileUpdater;


    static createTileUpdaterForSecondaryTile(tileId: String): TileUpdater;


    static getTemplateContent(type: TileTemplateType): Object;


  }

  export class BadgeUpdateManager {
    constructor();

    static createBadgeUpdaterForApplication(): BadgeUpdater;
    static createBadgeUpdaterForApplication(applicationId: String): BadgeUpdater;


    static createBadgeUpdaterForSecondaryTile(tileId: String): BadgeUpdater;


    static getTemplateContent(type: BadgeTemplateType): Object;


  }

  export class ToastNotificationManager {
    constructor();

    static createToastNotifier(): ToastNotifier;
    static createToastNotifier(applicationId: String): ToastNotifier;


    static getTemplateContent(type: ToastTemplateType): Object;


  }

  export class ToastActivatedEventArgs {
    arguments: String;
    constructor();

  }

}



