//
//  HeaderContent.swift
//  Astro
//
//  Created by Kerr Miller on 2016-12-05.
//  Copyright © 2016 Mobify Research & Development Inc. All rights reserved.
//

import Foundation

struct HeaderContent {
    var leftIcon: HeaderContentItem?
    var centerIcon: HeaderContentItem?
    var rightIcon: HeaderContentItem?

    func overlay(_ headerContent: HeaderContent) -> HeaderContent {
        return HeaderContent(
            leftIcon: headerContent.leftIcon ?? leftIcon,
            centerIcon: headerContent.centerIcon ?? centerIcon,
            rightIcon: headerContent.rightIcon ?? rightIcon
        )
    }

    init(leftIcon: HeaderContentItem? = nil, centerIcon: HeaderContentItem? = nil, rightIcon: HeaderContentItem? = nil) {
        self.leftIcon = leftIcon
        self.centerIcon = centerIcon
        self.rightIcon = rightIcon
    }

    init?(jsonObject: JSONObject, pluginResolver: PluginResolver, respond: RPCMethodCallback) {
        if jsonObject.keys.contains("leftIcon") {
            if let itemJson: JSONObject = jsonObject.get("leftIcon", respond: respond) {
                self.leftIcon = HeaderContentItem(jsonObject: itemJson, pluginResolver: pluginResolver, respond: respond)
            }

            // We coudn't get/parse the itemJson and a response was already sent
            if self.leftIcon == nil { return nil }
        }

        if jsonObject.keys.contains("centerIcon") {
            if let itemJson: JSONObject = jsonObject.get("centerIcon", respond: respond) {
                self.centerIcon = HeaderContentItem(jsonObject: itemJson, pluginResolver: pluginResolver, respond: respond)
            }

            // We coudn't get/parse the itemJson and a response was already sent
            if self.centerIcon == nil { return nil }
        }

        if jsonObject.keys.contains("rightIcon") {
            if let itemJson: JSONObject = jsonObject.get("rightIcon", respond: respond) {
                self.rightIcon = HeaderContentItem(jsonObject: itemJson, pluginResolver: pluginResolver, respond: respond)
            }

            // We coudn't get/parse the itemJson and a response was already sent
            if self.rightIcon == nil { return nil }
        }
    }
}

extension HeaderContent: CustomStringConvertible {
    var description: String {
        return "HeaderContent(leftIcon: \(leftIcon?.description ?? "No left icon"), centerIcon: \(centerIcon?.description ?? "No center icon"), rightIcon: \(rightIcon?.description ?? "No right icon"))"
    }
}

extension HeaderContent: Equatable { }

func ==(lhs: HeaderContent, rhs: HeaderContent) -> Bool {
    return lhs.leftIcon == rhs.leftIcon &&
        lhs.centerIcon == rhs.centerIcon &&
        lhs.rightIcon == rhs.rightIcon
}
