//
//  Error.swift
//  mas-cli
//
//  Created by Andrew Naylor on 21/08/2015.
//  Copyright (c) 2015 Andrew Naylor. All rights reserved.
//

public let MASErrorDomain: String = "MASErrorDomain"

private let MASErrorSource: String = "MASErrorSource"

public enum MASErrorCode: Int {
    case NoError
    case NotSignedIn
    case PurchaseError
    case NoDownloads
    case Cancelled
    case DownloadFailed
    case SignInError
    case AlreadySignedIn
    case SearchError
    case NoSearchResultsFound
    
    var exitCode: Int32 {
        return Int32(self.rawValue)
    }
}

public class MASError: NSError {
    var masCode: MASErrorCode? {
        return MASErrorCode(rawValue: code)
    }
    
    var sourceError: NSError? {
        return userInfo[MASErrorSource] as? NSError
    }
    
    convenience init(code: MASErrorCode, sourceError: NSError? = nil) {
        var userInfo: [NSObject: AnyObject] = [:]
        if let error = sourceError {
            userInfo[MASErrorSource] = error
        }
        self.init(domain: MASErrorDomain, code: code.rawValue, userInfo: userInfo)
    }
}

public func == (lhs: MASError, rhs: MASError) -> Bool {
    return false
}