//
//  NavigationBarPushAndPopDelegate.swift
//  PaiaiUIKit
//
//  Created by ffib on 2019/1/16.
//  Copyright © 2019 yb. All rights reserved.
//

import Foundation

public protocol NavigationBarPushAndPopDelegate: class {
    func setupNavigationBarPushAndPopDelegate()
    func setNavigationBar()
}

public extension NavigationBarPushAndPopDelegate where Self: UIViewController & NavigationControllerDelegate {
    func setupNavigationBarPushAndPopDelegate() {
        navigationController?.setDelegate(self)
    }
    
    func setNavigationBar() {}
}

public extension NavigationControllerDelegate where Self: UIViewController {
    
    func navigationController(_ navigationController: UINavigationController,
                              animationControllerFor operation: UINavigationController.Operation,
                              from fromVC: UIViewController,
                              to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        
        if operation == .push {
            (toVC as? NavigationBarInOutAnimator)?.navigationBarFadeAndMoveIn()
            (fromVC as? NavigationBarInOutAnimator)?.navigationBarFadeOut()
        } else {
            (toVC as? NavigationBarInOutAnimator)?.navigationBarFadeIn()
            (fromVC as? NavigationBarInOutAnimator)?.navigationBarFadeAndMoveOut()
        }
        
        return nil
    }
    
    func navigationController(_ navigationController: UINavigationController,
                              didShow viewController: UIViewController, animated: Bool) {
        guard let recognizer = navigationController.interactivePopGestureRecognizer else { return }
        recognizer.isEnabled = true
        guard let vc = viewController as? GestureRecognizerDelegate else { return }
        recognizer.setDelegate(vc)
    }
}