//
//  MessageViewModel.swift
//  PaiAi
//
//  Created by ffib on 2018/12/7.
//  Copyright © 2018 yb. All rights reserved.
//

import Foundation
import RxSwift
import RxCocoa

public protocol MessageViewModelDelegate: class {
    func didSelect(type: MessageType)
}

public class MessageViewModel {
    
    private var respository: MessageRepository
    private var disposeBag = DisposeBag()
    
    public weak var delegate: MessageViewModelDelegate?
    
    public var sysReadedTip = BehaviorRelay<Bool>(value: true)
    public var commentReadedTip = BehaviorRelay<Bool>(value: true)
    public var thumbupReadedTip = BehaviorRelay<Bool>(value: true)
    
    public var sysBtnTapped = PublishSubject<Void>()
    public var commentBtnTapped = PublishSubject<Void>()
    public var thumbupBtnTapped = PublishSubject<Void>()
    
    public init() {
        self.respository = MessageRepository()
        
        sysBtnTapped.asObservable().subscribe {[weak self] (_) in
            guard let `self` = self else { return }
            self.delegate?.didSelect(type: .system)
        }.disposed(by: disposeBag)
        
        commentBtnTapped.asObservable().subscribe {[weak self] (_) in
            guard let `self` = self else { return }
            self.delegate?.didSelect(type: .comment)
        }.disposed(by: disposeBag)
        
        thumbupBtnTapped.asObservable().subscribe {[weak self] (_) in
            guard let `self` = self else { return }
            self.delegate?.didSelect(type: .thumbup)
        }.disposed(by: disposeBag)
    }
    
    public func reload() {
        respository.load().asObservable().subscribe(onNext: {[unowned self] (items) in
            for item in items {
                switch item.msg_type {
                case .system:
                    self.sysReadedTip.accept(item.msg_unread_num == 0)
                case .thumbup:
                    self.thumbupReadedTip.accept(item.msg_unread_num == 0)
                case .comment:
                    self.commentReadedTip.accept(item.msg_unread_num == 0)
                }
            }
        }).disposed(by: disposeBag)
    }
}