/* 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 nsIDeletedMessageInfo;
interface nsISmsMessage;
interface nsIMmsMessage;
interface nsIMobileMessageThread;

%{C++
#define MOBILE_MESSAGE_SERVICE_CID { 0x829c1dd6, 0x0466, 0x4591, { 0x83, 0x6f, 0xb8, 0xf6, 0xfd, 0x1f, 0x7b, 0xa5 } }
#define MOBILE_MESSAGE_SERVICE_CONTRACTID "@mozilla.org/mobilemessage/mobilemessageservice;1"
%}

[scriptable, builtinclass, uuid(15267554-8854-11e5-8947-8f2150f4eabc)]
interface nsIMobileMessageService : nsISupports
{
  [implicit_jscontext]
  nsISmsMessage createSmsMessage(in long               id,
                                 in unsigned long long threadId,
                                 in DOMString          iccId,
                                 in DOMString          delivery,
                                 in DOMString          deliveryStatus,
                                 in DOMString          sender,
                                 in DOMString          receiver,
                                 in DOMString          body,
                                 in DOMString          messageClass,
                                 in unsigned long long timestamp,
                                 in unsigned long long sentTimestamp,
                                 in unsigned long long deliveryTimestamp,
                                 in bool               read);

  [implicit_jscontext]
  nsIMmsMessage createMmsMessage(in long               id,
                                 in unsigned long long threadId,
                                 in DOMString          iccId,
                                 in DOMString          delivery,
                                 in jsval              deliveryInfo,
                                 in DOMString          sender,
                                 in jsval              receivers,
                                 in unsigned long long timestamp,
                                 in unsigned long long sentTimestamp,
                                 in boolean            read,
                                 in DOMString          subject,
                                 in DOMString          smil,
                                 in jsval              attachments,
                                 in unsigned long long expiryDate,
                                 in boolean            readReportRequested);

  [implicit_jscontext]
  nsIMobileMessageThread createThread(in unsigned long long id,
                                      in jsval              participants,
                                      in unsigned long long timestamp,
                                      in DOMString          lastMessageSubject,
                                      in DOMString          body,
                                      in unsigned long long unreadCount,
                                      in DOMString          aLastMessageType);

  nsIDeletedMessageInfo createDeletedMessageInfo(
    [array, size_is(msgCount)] in long messageIds,
    in uint32_t msgCount,
    [array, size_is(threadCount)] in unsigned long long threadIds,
    in uint32_t threadCount);
};

%{C++
template<typename T> struct already_AddRefed;

already_AddRefed<nsIMobileMessageService>
NS_CreateMobileMessageService();
%}
