/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsISupports.idl"

interface nsIMsgDBHdr;
interface nsIMsgIdentity;

/**
 * Implement this interface and add to nsIMsgSendLater to receive notifications
 * of send later actions.
 */
[scriptable, uuid(a7bc603b-d0da-4959-a82f-4b99c138b9f4)]
interface nsIMsgSendLaterListener : nsISupports {
  /**
   * Notify the observer that the operation of sending messages later has
   * started.
   *
   * @param aTotalMessageCount  Number of messages to be sent. This will not
   *                            change over the time we are doing this sequence.
   */
  void onStartSending(in unsigned long aTotalMessageCount);

  /**
   * Notify the observer that the next message send/copy is starting and
   * provide details about the message.
   *
   * @param aCurrentMessage      The current message number that is being sent.
   * @param aTotalMessageCount   The total number of messages that we are
   *                             trying to send.
   * @param aMessageHeader       The header information for the message that is
   *                             being sent.
   * @param aMessageIdentity     The identity being used to send the message.
   */
  void onMessageStartSending(in unsigned long aCurrentMessage,
                             in unsigned long aTotalMessageCount,
                             in nsIMsgDBHdr aMessageHeader,
                             in nsIMsgIdentity aIdentity);

  /**
   * Notify the observer of the current progress of sending a message. The one
   * function covers sending the message over the network and copying to the
   * appropriate sent folder.
   *
   * @param aCurrentMessage      The current message number that is being sent.
   * @param aTotalMessageCount   The total number of messages that we are
   *                             trying to send.
   * @param aMessageSendPercent  The percentage of the message sent (0 to 100)
   * @param aMessageCopyPercent  The percentage of the copy completed (0 to
   *                             100). If there is no copy for this message,
   *                             this may be set to 100 at the same time as
   *                             aMessageSendPercent.
   */
  void onMessageSendProgress(in unsigned long aCurrentMessage,
                             in unsigned long aTotalMessageCount,
                             in unsigned long aMessageSendPercent,
                             in unsigned long aMessageCopyPercent);

  /**
   * Notify the observer of an error in the send message later function.
   *
   * @param aCurrentMessage      The current message number that is being sent.
   * @param aMessageHeader       The header information for the message that is
   *                             being sent.
   * @param aStatus              The error status code.
   * @param aMsg                 A text string describing the error.
   */
  void onMessageSendError(in unsigned long aCurrentMessage,
                          in nsIMsgDBHdr aMessageHeader,
                          in nsresult aStatus,
                          in wstring aMsg);

  /**
   * Notify the observer that the send unsent messages operation has finished.
   * This is called regardless of the success/failure of the operation.
   *
   * @param aStatus     Status code for the message send.
   * @param aMsg        A text string describing the error.
   * @param aTotalTried Total number of messages that were attempted to be sent.
   * @param aSuccessful How many messages were successfully sent.
   */
  void onStopSending(in nsresult aStatus, in wstring aMsg,
                     in unsigned long aTotalTried, in unsigned long aSuccessful);
};
