import Foundation
import UIKit
import AsyncDisplayKit
import Display

public protocol ItemListControllerSearchNavigationContentNode {
    func activate()
    func deactivate()
    
    func setQueryUpdated(_ f: @escaping (String) -> Void)
}

public protocol ItemListControllerSearch {
    func isEqual(to: ItemListControllerSearch) -> Bool
    func titleContentNode(current: (NavigationBarContentNode & ItemListControllerSearchNavigationContentNode)?) -> NavigationBarContentNode & ItemListControllerSearchNavigationContentNode
    func node(current: ItemListControllerSearchNode?, titleContentNode: (NavigationBarContentNode & ItemListControllerSearchNavigationContentNode)?) -> ItemListControllerSearchNode
}

open class ItemListControllerSearchNode: ASDisplayNode {
    open func activate() {
        self.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2, timingFunction: CAMediaTimingFunctionName.easeInEaseOut.rawValue)
    }
    
    open func deactivate() {
        self.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, timingFunction: CAMediaTimingFunctionName.easeInEaseOut.rawValue, removeOnCompletion: false, completion: { [weak self] _ in
            self?.removeFromSupernode()
        })
    }
    
    open func scrollToTop() {
    }
    
    open func queryUpdated(_ query: String) {
    }
    
    open func updateLayout(layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) {
    }
}