//
//  ContainerViewController.swift
//  Paiai_iOS
//
//  Created by FFIB on 2018/12/6.
//  Copyright © 2018 FFIB. All rights reserved.
//

import UIKit
import RxSwift
import PaiaiDataKit
import PaiaiUIKit

protocol ContainerViewControllerDelegate: class {
    func presentMine()
    func presentLogin()
}

public final class ContainerViewController: PageViewController {

    weak var delegate: ContainerViewControllerDelegate?
    var userInfo: UserInfoViewModel!
    private var disposeBag = DisposeBag()
    
    private var iconView: UIImageView = {
        let iconView = UIImageView(frame: CGRect(x: 0, y: 0, width: 18, height: 32))
        
        iconView.contentMode = .scaleAspectFill
        iconView.isUserInteractionEnabled = true
        iconView.image = UIImage.Navigation.verticalPoints
        
        return iconView
    }()
    
    private var headerView: UIImageView = {
        let headerView = UIImageView(frame: CGRect(x: 20, y: 0, width: 32, height: 32))
        
        headerView.isUserInteractionEnabled = true
        headerView.image = UIImage.defaultAvatar
        
        return headerView
    }()
    
    private var navigationContentView: UIView = {
        let contentView = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 32))
        return contentView
        
    }()
    
    /// life circle
    override public func viewDidLoad() {
        super.viewDidLoad()
        setupNavigationBar()
        bindInteraction()
    }
    
    public override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        bindLoggedInInteraction()
        bindUserInfoToHeaderView()
    }
    
    func setupNavigationBar() {
        navigationController?.navigationBar.shadowImage = UIImage()
        navigationController?.navigationBar.tintColor = UIColor.white
        navigationController?.navigationBar.barTintColor = UIColor.white
        navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
        navigationController?.navigationBar.setBackgroundImage(UIImage.Navigation.background, for: .default)
        
        constructNavigationViewHierarchy()
    }
    
    func constructNavigationViewHierarchy() {
        navigationContentView.addSubview(iconView)
        navigationContentView.addSubview(headerView)
        navigationItem.setLeftItem(UIBarButtonItem(customView: navigationContentView))
    }
}

/// binding UI
fileprivate extension ContainerViewController {
    func bindLoggedInInteraction() {
        userInfo.notLoggedIn
            .asDriver(onErrorJustReturn: ())
            .drive(onNext: { [unowned self] (_) in
                self.delegate?.presentLogin()
            }).disposed(by: disposeBag)
    }
    
    func bindInteraction() {
        let tap = UITapGestureRecognizer()
        tap.rx.event.subscribe(onNext: { (_) in
            self.delegate?.presentMine()
        }).disposed(by: disposeBag)
        navigationContentView.addGestureRecognizer(tap)
    }
    
    func bindUserInfoToHeaderView() {
        userInfo.shareUserInfo.asObservable()
            .subscribe(onNext: {[unowned self] (info) in
                self.headerView.setImage(info.photoPath, placeholder: UIImage.defaultAvatar)
        }).disposed(by: disposeBag)
    }
}