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

import Foundation
import RxSwift

struct GroupDetailRemoteAPI {
    var groupId: String
    
    init(groupId: String) {
        self.groupId = groupId
    }
    
    private func parse(_ json: JSON) -> GroupDetailItem? {
        guard let data = json["data"] as? [String: AnyObject] else { return nil }
        return GroupDetailItem(json: data)
    }
    
    func loadContent() -> Single<GroupDetailItem> {
        let resource = ContentResource<GroupDetailItem>(path: .groupDetail,
                                                        parameter: ["user_id": ShareUserId, "group_id": groupId],
                                                        parseJSON: parse)
        return resource.loadContent()
    }
    
    func quit() -> Completable {
        let quitResoure = StatusResource(path: .groupQuit,
                                         parameter: ["user_id": ShareUserId, "group_id": groupId])
        return quitResoure.getStatus()
    }
    
    func lock() -> Completable {
        let lockResource = StatusResource(path: .groupLock,
                                          parameter: ["user_id": ShareUserId, "group_id": groupId])
        return lockResource.getStatus()
    }
    
    func unlock() -> Completable {
        let unlockResource = StatusResource(path: .groupUnlock,
                                            parameter: ["user_id": ShareUserId, "group_id": groupId])
        return unlockResource.getStatus()
    }
    
    func remove(userId: String) -> Completable {
        let deleteResource = StatusResource(path: .groupRemove,
                                            parameter: ["admin_id": ShareUserId,
                                                        "group_id": groupId,
                                                        "user_id": userId])
        return deleteResource.getStatus()
    }
    
    func update(name: String) -> Completable {
        let updateResource = StatusResource(path: .groupUpdate,
                                            parameter: ["admin_id": ShareUserId,
                                                        "group_id": groupId,
                                                        "group_name": name])
        return updateResource.getStatus()
    }
}