/* 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"

%{C++
#define MOBILE_MESSAGE_DATABASE_SERVICE_CID \
{ 0x0d84b9c2, 0x8f76, 0x4ba4,    \
{ 0xa5, 0xcd, 0xdb, 0xfb, 0x01, 0xdf, 0xda, 0x99 } }
#define MOBILE_MESSAGE_DATABASE_SERVICE_CONTRACTID "@mozilla.org/mobilemessage/mobilemessagedatabaseservice;1"
%}

interface nsICursorContinueCallback;
interface nsIMobileMessageCallback;
interface nsIMobileMessageCursorCallback;

[scriptable, uuid(ead626bc-f5b4-47e1-921c-0b956c9298e0)]
interface nsIMobileMessageDatabaseService : nsISupports
{
  [binaryname(GetMessageMoz)]
  void getMessage(in long messageId,
                  in nsIMobileMessageCallback request);

  void deleteMessage([array, size_is(count)] in long messageIds,
                     in uint32_t count,
                     in nsIMobileMessageCallback request);

  nsICursorContinueCallback createMessageCursor(in boolean hasStartDate,
                                                in unsigned long long startDate,
                                                in boolean hasEndDate,
                                                in unsigned long long endDate,
                                                [array, size_is(numbersCount)] in wstring numbers,
                                                in uint32_t numbersCount,
                                                [Null(Null), Undefined(Null)] in DOMString delivery,
                                                in boolean hasRead,
                                                in boolean read,
                                                in unsigned long long threadId,
                                                in boolean reverse,
                                                in nsIMobileMessageCursorCallback callback);

  void markMessageRead(in long messageId,
                       in boolean value,
                       in boolean sendReadReport,
                       in nsIMobileMessageCallback request);

  nsICursorContinueCallback createThreadCursor(in nsIMobileMessageCursorCallback callback);
};

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

already_AddRefed<nsIMobileMessageDatabaseService>
NS_CreateMobileMessageDatabaseService();
%}
