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

import Foundation
import RxSwift

struct MessageRemoteAPI {
    
    private func parse(_ json: JSON) -> [MessageItem]? {
        guard let data = json["data"] as? [String: AnyObject],
            let messages = data["messages"] as? [[String: AnyObject]] else { return nil }
        return  messages.map { MessageItem(json: $0) }
    }
    
    private func parseMessageList(_ json: JSON) -> NetworkArrayData<MessageListItem>? {
        guard let data  = json["data"] as? [String: AnyObject] else { return nil }
        return NetworkArrayData<MessageListItem>(json: data, dataField: "messages")
    }
    
    func loadContent() -> Single<[MessageItem]> {
        let resource = ContentResource<[MessageItem]>(path: .mesList,
                                                      parameter: ["user_id": ShareUserId],
                                                      parseJSON: parse)
        return resource.loadContent()
    }
    
    func loadMessageList(_ type: MessageType, page: Int) -> Single<NetworkArrayData<MessageListItem>> {
        let resource = ContentResource<NetworkArrayData<MessageListItem>>(path: type.model.path,
                                                                          parameter: ["user_id": ShareUserId, "page": page, "num": 20],
                                                                          parseJSON: parseMessageList)
        return resource.loadContent()
    }
    
    func remove(_ type: MessageType, pk: Int) -> Completable {
        let removeResource = StatusResource(path: type.model.removePath,
                                            parameter: ["user_id": ShareUserId, "pk": pk])
        return removeResource.getStatus()
    }
    
    func removeAll(_ type: MessageType) -> Completable {
        let removeResource = StatusResource(path: type.model.removePath,
                                            parameter: ["user_id": ShareUserId, "all": true])
        return removeResource.getStatus()
    }
    
    func readed(_ type: MessageType) -> Completable {
        let readedResource = StatusResource(path: type.model.readPath,
                                            parameter: ["user_id": ShareUserId])
        return readedResource.getStatus()
    }
}