//
//  OrderItem.swift
//  PaiaiDataKit
//
//  Created by ffib on 2018/12/19.
//  Copyright © 2018 yb. All rights reserved.
//

import Foundation
import ObjectMapper
import RxDataSources

public struct OrderItem: JSONCode {
    //model display layer
    public var order_id: String = ""
    public var displayPrice: String = ""
    public var displayPhoto: String = ""
    public var displayCreated: String = ""
    
    var created_at: Date?
    var body: String = ""
    var to_uid: String = ""
    var to_lid: String = ""
    var pay_status: Int = 0
    var paid_at: String = ""
    var from_uid: String = ""
    var total_fee: CGFloat = 0
    
    var group_photo_info: PhotoItem?
    
    init(json: [String: AnyObject]) {
        self.init(map: Map(mappingType: .fromJSON, JSON: json))
    }
}

extension OrderItem: Mappable {
    
    public init(map: Map) {
        mapping(map: map)
    }
    
    mutating public func mapping(map: Map) {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
        body                <-  map["body"]
        to_lid              <-  map["to_lid"]
        to_uid              <-  map["to_uid"]
        paid_at             <-  map["paid_at"]
        from_uid            <-  map["from_uid"]
        total_fee           <-  map["total_fee"]
        pay_status          <-  map["pay_status"]
        group_photo_info    <-  map["group_photo_info"]
        created_at          <-  (map["created_at"], DateFormatterTransform(dateFormatter:dateFormatter))
        
        //model display layer
        order_id            <-  map["order_id"]
        displayPrice = "+\(total_fee / 100)"
        guard let createdAt = created_at, let photoInfo = group_photo_info else { return }
        displayCreated = createdAt.getTimeString(format: "YYYY-MM-dd HH:MM")
        displayPhoto = photoInfo.photo_thumbnail_url
    }
}

extension OrderItem: IdentifiableType, Equatable {
    public typealias Identity = String
    public var identity: String { return order_id }
    
    public static func == (lhs: OrderItem, rhs: OrderItem) -> Bool {
        return lhs.order_id == rhs.order_id
    }
}