//
//  PresentAppearAnimatedTransitioning.swift
//  PaiAi
//
//  Created by FFIB on 2018/12/16.
//  Copyright © 2018 FFIB. All rights reserved.
//

import UIKit

final class PresentAppearAnimatedTransitioning: NSObject, UIViewControllerAnimatedTransitioning {

    weak var delegate: PresentAnimatorDelegate?
    fileprivate var animator: PresentAnimatable

    init(animator: PresentAnimatable) {
        self.animator = animator
        super.init()
    }

    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return 0.3
    }

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        guard let toVC = transitionContext.viewController(forKey: .to),
            let toView = toVC.view,
            let animationView = delegate?.animationView else { return }

        transitionContext.containerView.addSubview(toView)
        toView.addSubview(animationView)

        let duration = transitionDuration(using: transitionContext)

        animator.toViewPresentedAnimation(duration: duration, in: toView)
        animator.contentViewAppearAnimation(duration: duration, in: animationView)

        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + duration) {
            let isCancelled = transitionContext.transitionWasCancelled
            transitionContext.completeTransition(!isCancelled)
            UIApplication.shared.endIgnoringInteractionEvents()
        }
    }
}