//
//  PassThroughOutputNode.swift
//  lottie-swift
//
//  Created by Brandon Withrow on 1/30/19.
//

import Foundation
import CoreGraphics

class PassThroughOutputNode: NodeOutput {
  
  init(parent: NodeOutput?) {
    self.parent = parent
  }
  
  let parent: NodeOutput?
  
  var hasUpdate: Bool = false
  
  func hasOutputUpdates(_ forFrame: CGFloat) -> Bool {
    /// Changes to this node do not affect downstream nodes.
    let parentUpdate = parent?.hasOutputUpdates(forFrame) ?? false
    /// Changes to upstream nodes do, however, affect this nodes state.
    hasUpdate = hasUpdate || parentUpdate
    return parentUpdate
  }
  
  var outputPath: CGPath? {
    if let parent = parent {
      return parent.outputPath
    }
    return nil
  }
  
  func hasRenderUpdates(_ forFrame: CGFloat) -> Bool {
    /// Return true if there are upstream updates or if this node has updates
    let upstreamUpdates = parent?.hasOutputUpdates(forFrame) ?? false
    hasUpdate = hasUpdate || upstreamUpdates
    return hasUpdate
  }
}
