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

import UIKit

public protocol NavigationBarInOutAnimator: class {
    var navigationView: UIView { get }
    func navigationBarFadeIn()
    func navigationBarFadeOut()
    func navigationBarFadeAndMoveIn()
    func navigationBarFadeAndMoveOut()
    func navigationBarFadeOutWithPercentage(_ percentage: CGFloat)
    func navigationBarFadeInWithPercentage(_ percentage: CGFloat)
}

public extension NavigationBarInOutAnimator where Self: UIViewController & NavigationBarPushAndPopDelegate {
    func navigationBarFadeIn() {
        UIView.animate(withDuration: 0.3, animations: {
            self.navigationView.alpha = 1
        }, completion: nil)
    }
    
    func navigationBarFadeOut() {
        UIView.animate(withDuration: 0.3, animations: {
            self.navigationView.alpha = 0
        }, completion: nil)
    }
    
    func navigationBarFadeAndMoveIn() {
        setNavigationBar()
        navigationController?.navigationBar.layoutIfNeeded()
        
        let originX = navigationView.center.x
        navigationView.center.x = UIScreen.main.bounds.width
        
        UIView.animate(withDuration: 0.3, animations: {
            self.navigationView.alpha = 1
            self.navigationView.center.x = originX
        }, completion: nil)
    }
    
    func navigationBarFadeAndMoveOut() {
        UIView.animate(withDuration: 0.3, animations: {
            self.navigationView.alpha = 0
            self.navigationView.center.x = UIScreen.main.bounds.width
        }, completion: { _ in
            self.navigationView.removeFromSuperview()
        })
    }
    
    func navigationBarFadeOutWithPercentage(_ percentage: CGFloat) {
        navigationView.alpha = 1 * (1 - 1.1 * percentage)
        navigationView.center.x = UIScreen.main.bounds.width / 2  * (1 + 1.1 * percentage)
    }
    
    func navigationBarFadeInWithPercentage(_ percentage: CGFloat) {
        navigationView.alpha = 1 * percentage
    }
}