/* 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 "domstubs.idl"
#include "nsISupports.idl"

interface nsIDOMBlob;

// If this is changed, change the WebIDL dictionary as well.
dictionary MmsAttachment
{
  DOMString? id;
  DOMString? location;
  nsIDOMBlob content; // If the content blob is a text/plain type, the encoding
                      // for text should always be "utf-8".
};

dictionary MmsDeliveryInfo
{
  DOMString? receiver;
  DOMString? deliveryStatus;
  DOMTimeStamp deliveryTimestamp; // 0 if not available (e.g.,
                                  // |delivery| = "received" or not yet delivered).
  DOMString? readStatus;
  DOMTimeStamp readTimestamp; // 0 if not available (e.g.,
                              // |delivery| = "received" or not yet read).
};

[scriptable, builtinclass, uuid(4ca3a456-0e25-4331-974a-a8f11a5efb4b)]
interface nsIDOMMozMmsMessage : nsISupports
{
  /**
   * |type| is always "mms".
   */
  readonly attribute DOMString type;

  readonly attribute long      id;

  readonly attribute unsigned long long threadId;

  /**
   * Integrated Circuit Card Identifier.
   *
   * Will be null if ICC is not available.
   */
  readonly attribute DOMString iccId;

  /**
   * Should be "not-downloaded", "received", "sending", "sent" or "error".
   */
  readonly attribute DOMString delivery;

  [implicit_jscontext]
  readonly attribute jsval     deliveryInfo;   // MmsDeliveryInfo[]

  readonly attribute DOMString sender;

  [implicit_jscontext]
  readonly attribute jsval     receivers;      // DOMString[]

  readonly attribute DOMTimeStamp timestamp;

  readonly attribute boolean   read;
  readonly attribute DOMString subject;
  readonly attribute DOMString smil;

  [implicit_jscontext]
  readonly attribute jsval     attachments;    // MmsAttachment[]

  readonly attribute DOMTimeStamp expiryDate;  // Expiry date for an MMS to be
                                               // manually downloaded.

  // Request read report from sender or not.
  readonly attribute boolean   readReportRequested;
};
