//
//  GroupPhotoRemoteAPI.swift
//  PaiaiDataKit
//
//  Created by ffib on 2019/1/2.
//  Copyright © 2019 yb. All rights reserved.
//

import Foundation
import RxSwift

struct GroupPhotoRemoteAPI {
    private var groupId: String
    
    init(groupId: String) {
        self.groupId = groupId
    }
    
    private func parse(_ json: JSON) -> [PhotoItem]? {
        guard let data = json["data"] as? [String: AnyObject],
            let photos = data["photos"] as? [[String: AnyObject]] else { return nil }
        let dataArr = photos.compactMap { $0 }
        return dataArr.map { PhotoItem(json: $0) }
    }
    
    private func parseUpload(_ json: JSON) -> PhotoItem? {
        guard let data = json["data"] as? [String: AnyObject],
            let photos = data["photos"] as? [[String: AnyObject]] else { return nil }
        let dataArr = photos.compactMap { $0 }
        return PhotoItem(json: dataArr[0])
    }
 
    func loadContent() -> Single<[PhotoItem]> {
        let resource = ContentResource<[PhotoItem]>(path: .groupPhotoList,
                                                     parameter: ["user_id": ShareUserId,
                                                                 "group_id": groupId],
                                                     parseJSON: parse)
        return resource.loadContent()
    }
    
    func uploadPhoto(data: Data) -> Single<PhotoItem> {
        let name = groupId + "" + "\(Date.timeIntervalSinceReferenceDate)"
        let file = FileModel(name: name, fileData: data)
        let uploadResource = UploadResource<PhotoItem>(path: .photoUpload,
                                                       parameter: ["user_id": ShareUserId,
                                                                   "group_id": groupId,
                                                                   "photo": file],
                                                       parseJSON: parseUpload)
        
        return uploadResource.upload()
    }
}