//
//  NimbleMTXError.h
//  NimbleMTX
//
//  Created by Machine Union (dev361) on 2012-04-11.
//  Copyright (c) 2012 Electronic Arts. All rights reserved.
//

#import <NimbleBase/NimbleError.h>

extern NSString* const NIMBLE_MTX_ERROR_DOMAIN;

typedef enum tag_NimbleMTXErrorCode
{
	NIMBLE_MTX_ERROR_BILLING_NOT_AVAILABLE              = 20000, //< Arbitrary starting integer. Do not hardcode int values.
	NIMBLE_MTX_ERROR_ITEM_ALREADY_OWNED                 = 20001,
	NIMBLE_MTX_ERROR_ITEM_NOT_OWNED                     = 20002,
	NIMBLE_MTX_ERROR_USER_CANCELED                      = 20003,
	NIMBLE_MTX_ERROR_VERIFICATION_ERROR                 = 20004,
	NIMBLE_MTX_ERROR_GET_NONCE_ERROR                    = 20005,
	NIMBLE_MTX_ERROR_NON_CRITICAL_INTERRUPTION          = 20006,
	NIMBLE_MTX_ERROR_INTERNAL_STATE                     = 20007,
	NIMBLE_MTX_ERROR_TRANSACTION_PENDING                = 20008,
	NIMBLE_MTX_ERROR_TRANSACTION_NOT_RESUMABLE          = 20009,
	NIMBLE_MTX_ERROR_UNRECOGNIZED_TRANSACTION_ID        = 20010,
	NIMBLE_MTX_ERROR_INVALID_TRANSACTION_STATE          = 20011,
	NIMBLE_MTX_ERROR_UNABLE_TO_CONSTRUCT_REQUEST        = 20012,
    NIMBLE_MTX_ERROR_PLATFORM_ERROR                     = 20013,
    NIMBLE_MTX_ERROR_INVALID_SERVER_RESPONSE            = 20014,
    NIMBLE_MTX_ERROR_GETTING_PREPURCHASE_INFO           = 20015,
    NIMBLE_MTX_ERROR_ITEM_UNAVAILABLE                   = 20016,
	NIMBLE_MTX_ERROR_INVALID_SKU                        = 20017,
    NIMBLE_MTX_ERROR_TRANSACTION_DEFERRED               = 20018,
    NIMBLE_MTX_ERROR_TRANSACTION_SUPERSEDED             = 20019,
	NIMBLE_MTX_ERROR_EMPTY_SYNERGY_CATALOG              = 20020,
    NIMBLE_MTX_ERROR_EMPTY_BILLING_CATALOG              = 20021,
    NIMBLE_MTX_ERROR_RECEIPT_NOT_PRESENT                = 20022,
    NIMBLE_MTX_ERROR_RECEIPT_CONTAINER_INVALID          = 20023,
    NIMBLE_MTX_ERROR_RECEIPT_CONTAINER_NOT_SIGNED       = 20024,
    NIMBLE_MTX_ERROR_RECEIPT_CONTAINER_NO_DATA          = 20025,
    NIMBLE_MTX_ERROR_RECEIPT_CERTIFICATE_INVALID        = 20026,
    NIMBLE_MTX_ERROR_RECEIPT_SIGNATURE_INVALID          = 20027,
    NIMBLE_MTX_ERROR_RECEIPT_PAYLOAD_INVALID            = 20028,
    NIMBLE_MTX_ERROR_RECEIPT_PAYLOAD_ATTR_INVALID       = 20029,
    NIMBLE_MTX_ERROR_RECEIPT_PAYLOAD_ATTR_TYPE_INVALID  = 20030,
    NIMBLE_MTX_ERROR_RECEIPT_PAYLOAD_ATTR_VER_INVALID   = 20031,
    NIMBLE_MTX_ERROR_RECEIPT_PAYLOAD_ATTR_VAL_INVALID   = 20032,
    NIMBLE_MTX_ERROR_RECEIPT_PAYLOAD_NOT_COMPLETE       = 20033,
    NIMBLE_MTX_ERROR_RECEIPT_BUNDLE_ID_ERROR            = 20034,
    NIMBLE_MTX_ERROR_RECEIPT_BUNDLE_VER_ERROR           = 20035,
    NIMBLE_MTX_ERROR_RECEIPT_HASH_ERROR                 = 20036,
	NIMBLE_MTX_ERROR_ITEM_TYPE_NOT_MATCH				= 20037,
} NimbleMTXErrorCode;

@interface NimbleMTXError : NimbleError

+ (id)errorWithErrorCause:(NSError*)cause code:(NimbleMTXErrorCode)code andReason:(NSString*)message, ... ;

+ (id)errorWithErrorCode:(NimbleMTXErrorCode)code andReason:(NSString*)message, ... ;

- (id)initWithErrorCause:(NSError*)cause code:(NimbleMTXErrorCode)code andReason:(NSString*)message, ... ;

- (id)initWithErrorCode:(NimbleMTXErrorCode)code andReason:(NSString*)message, ... ;

@end
