//
//  PhotoDetailRemoteAPI.swift
//  PaiaiDataKit
//
//  Created by FFIB on 2019/3/18.
//  Copyright © 2019 FFIB. All rights reserved.
//

import Foundation
import RxSwift

struct PhotoDetailRemoteAPI {
    var photoId: String
    var groupId: String
    init(photoId: String, groupId: String) {
        self.photoId = photoId
        self.groupId = groupId
    }

    private func parseCommtents(_ json: JSON) -> [PhotoCommentItem] {
        guard let data = json["data"] as? [String: AnyObject],
            let comments = data["comments"] as? [[String: AnyObject]] else { return [] }
        return comments.compactMap { PhotoCommentItem(json: $0) }
    }

    private func parseThumbups(_ json: JSON) -> [PhotoThumbupUserItem] {
        guard let data = json["data"] as? [String: AnyObject],
            let thumbups = data["thumbups"] as? [[String: AnyObject]] else { return [] }
        return thumbups.compactMap { PhotoThumbupUserItem(json: $0) }
    }

    func loadThumbups() -> Single<[PhotoThumbupUserItem]> {
        let resource = ContentResource<[PhotoThumbupUserItem]>(path: .thumbupList,
                                                           parameter: ["group_id": groupId,
                                                                       "photo_id": photoId,
                                                                       "user_id": ShareUserId],
                                                           parseJSON: parseThumbups)

        return resource.loadContent()
    }

    func loadComments() -> Single<[PhotoCommentItem]> {
        let resource = ContentResource<[PhotoCommentItem]>(path: .commentList,
                                                                           parameter: ["group_id": groupId,
                                                                                       "photo_id": photoId,
                                                                                       "user_id": ShareUserId],
                                                                           parseJSON: parseCommtents)

        return resource.loadContent()
    }

    func submitComment(text: String) -> Single<[PhotoCommentItem]> {
        let resource = ContentResource<[PhotoCommentItem]>(path: .commentSubmit,
                                                           parameter: ["group_id": groupId,
                                                                       "photo_id": photoId,
                                                                       "user_id": ShareUserId,
                                                                       "comment": text],
                                                           parseJSON: parseCommtents)
        return resource.loadContent()

    }

    func submitThumbup() -> Single<[PhotoThumbupUserItem]> {
        let resource = ContentResource<[PhotoThumbupUserItem]>(path: .thumbupSubmit,
                                                           parameter: ["group_id": groupId,
                                                                       "photo_id": photoId,
                                                                       "user_id": ShareUserId],
                                                           parseJSON: parseThumbups)
        return resource.loadContent()
    }

    func cancelThumbup() {
        let resource = ContentResource<[PhotoCommentItem]>(path: .thumbupCancel,
                                                           parameter: ["group_id": groupId,
                                                                       "photo_id": photoId,
                                                                       "user_id": ShareUserId],
                                                           parseJSON: parseCommtents)
        _ = resource.loadContent()
    }
}