//
//  MessageListRepository.swift
//  PaiAi
//
//  Created by zhengjianfei on 16/4/7.
//  Copyright © 2016年 FFIB. All rights reserved.
//

import Foundation
import RxSwift

public protocol MessageInteractionModel {
    var path: Interfaces { get }
    var removePath: Interfaces { get }
    var readPath: Interfaces { get }
    var title: String { get }
}

extension MessageType {
    
    public var model: MessageInteractionModel {
        switch self {
        case .thumbup: return MessagethumbupInteractionModel()
        case .comment: return MessageCommentInteractionModel()
        case .system: return MessageSystemInteractionModel()
        }
    }
    
    fileprivate struct MessagethumbupInteractionModel: MessageInteractionModel {
        var path: Interfaces { return .mesThumbupList}
        var removePath: Interfaces { return .mesThumbupClear }
        var readPath: Interfaces { return .mesThumbupRead }
        var title: String { return "赞" }
    }
    
    fileprivate struct MessageCommentInteractionModel: MessageInteractionModel {
        var path: Interfaces { return .mesCommentList}
        var removePath: Interfaces { return .mesCommentClear }
        var readPath: Interfaces { return .mesCommentRead }
        var title: String { return "评论" }
    }
    
    fileprivate struct MessageSystemInteractionModel: MessageInteractionModel {
        var path: Interfaces { return .mesSystemList}
        var removePath: Interfaces { return .mesSystemClear }
        var readPath: Interfaces { return .mesSystemRead }
        var title: String { return "系统消息" }
    }
}



struct MessageListRepository {
    var messageListRemotAPI: MessageListRemoteAPI
    
    init(type: MessageType) {
        messageListRemotAPI = MessageListRemoteAPI(type: type)
    }
    
    func load(page: Int) -> Single<NetworkArrayData<MessageListItem>> {
        return messageListRemotAPI.loadContent(page: page)
    }
    
    func remove(pk: Int) -> Completable {
        return messageListRemotAPI.remove(pk: pk)
    }
    
    func removeAll() -> Completable {
        return messageListRemotAPI.removeAll()
    }
    
    func readed() -> Completable {
        return messageListRemotAPI.readed()
    }
}