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

import Foundation
import ObjectMapper
import RxDataSources

public struct GroupItem: JSONCode {
    public var create_at = ""
    public var created_at: Date?
    public var group_desc: String = ""
    public var group_lock: Bool = false
    public var group_default_avatar = 0
    public var admin_id = ""
    public var group_name = ""
    public var group_from = 0
    public var group_id = ""
    public var group_avatar = ""
    public var group_photo_num = 0
    
    //tour group info
    public var gathered_at = ""
    public var gather_str = ""
    public var gather_at: Date?
    public var phone: Int = 0
    public var total_persons = 0
    public var attentions = ""
    public var schedules = ""
    public var ended_at: Date?
    public var gather_location = ""
    public var gather_lat = 0.0
    public var gather_lon = 0.0
    public var gather_screenshot = ""
    
    init(json: [String: AnyObject]) {
        self.init(map: Map(mappingType: .fromJSON, JSON: json))
    }
}

extension GroupItem: 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"
        create_at            <- map["created_at"]
        created_at           <-  (map["created_at"], DateFormatterTransform(dateFormatter:dateFormatter))
        group_desc           <-  map["group_desc"]
        group_lock           <-  map["group_lock"]
        group_default_avatar <-  map["group_default_avatar"]
        admin_id             <-  map["admin_id"]
        group_name           <-  map["group_name"]
        group_from           <-  map["group_from"]
        group_id             <-  map["group_id"]
        group_avatar         <-  map["group_avatar"]
        group_photo_num      <-  map["group_photo_num"]
        gather_at            <-  (map["gathered_at"], DateFormatterTransform(dateFormatter:dateFormatter))
        gathered_at          <-  map["gathered_at"]
        phone                <-  map["phone"]
        total_persons        <-  map["total_persons"]
        ended_at             <-  (map["ended_at"], DateFormatterTransform(dateFormatter:dateFormatter))
        gather_location      <-  map["gather_location"]
        gather_lat           <-  map["gather_lat"]
        gather_lon           <-  map["gather_lon"]
        gather_screenshot    <-  map["gather_screenshot"]
        if let value = map["banners"].currentValue as? [String: Any] {
            let banner = Map(mappingType: MappingType.fromJSON, JSON: value)
            attentions           <-  banner["attentions"]
            schedules            <-  banner["schedules"]
        }
        
        if let date = created_at {
            let createDateFormatter = DateFormatter()
            createDateFormatter.dateFormat = "yyyy年MM月dd日 HH:mm"
            create_at = createDateFormatter.string(from: date)
        }
    }
}

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