package edu.colorado.phet.movingman.ladybug

import edu.colorado.phet.common.phetcommon.view.graphics.transforms.ModelViewTransform2D
import edu.colorado.phet.common.piccolophet.nodes.PhetPPath
import java.awt.geom.{GeneralPath, Point2D}
import java.awt.{BasicStroke, Color}
import umd.cs.piccolo.PNode
import java.awt.geom.Path2D

class LadybugSolidTraceNode(model: LadybugModel, transform: ModelViewTransform2D, shouldBeVisible: () => Boolean, observable: ObservableS) extends LadybugTraceNode(model, transform, shouldBeVisible, observable) {
  val path = new PhetPPath(new BasicStroke(4), Color.red)
  addChild(path)

  update(model)

  def update(model: LadybugModel) = {
    val p = new GeneralPath
    implicit def historyToPoint(dataPoint: DataPoint) = new Point2D.Float(dataPoint.state.position.x.toFloat, dataPoint.state.position.y.toFloat)

    val historyToShow = getHistoryToShow()
    if (historyToShow.length > 0) {
      val t = transform.modelToView(historyToShow(0))
      p.moveTo(t.x, t.y)
      for (h <- historyToShow) { //todo: should skip first point from moveTo
        val pt: Point2D.Float = h
        val tx = transform.modelToView(pt)
        p.lineTo(tx.getX.toFloat, tx.getY.toFloat)
      }
    }
    path.setPathTo(p)
  }

}