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

import Foundation
import ObjectMapper
import RxDataSources

public struct MessageListItem: JSONCode {
    public var content = ""
    public var msg_title: String = ""
    public var create_at: String = ""
    public var from_avatar: String = ""
    public var msg_content: String = ""
    public var from_nickname: String = ""
    public var group_photo_info = PhotoItem(json: [:])
    public var title: String = ""
    public var url: String = ""

    var read: Bool = false
    public var created_at: Date?
    
    var pk = 0
    var from_uid: String = ""
    var photo_id: String = ""
    var group_id: String = ""
    
    init(json: [String: AnyObject]) {
        self.init(map: Map(mappingType: .fromJSON, JSON: json))
    }
}

extension MessageListItem: 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"
        created_at          <-  (map["created_at"], DateFormatterTransform(dateFormatter:dateFormatter))
        content             <-  map["content"]
        pk                  <-  map["pk"]
        read                <-  map["read"]
        from_avatar         <-  map["from_avatar"]
        from_nickname       <-  map["from_nickname"]
        from_uid            <-  map["from_uid"]
        group_photo_info    <-  map["group_photo_info"]
        photo_id            <-  map["photo_id"]
        group_id            <-  map["group_id"]
        msg_content         <-  map["msg_content"]
        msg_title           <-  map["msg_title"]
        url                 <-  map["url"]
        title               <-  map["title"]
        
        guard let created_at = created_at else { return }
        create_at = created_at.getTimeInfoFromDate()
    }
}

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