// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import "dart:math" as math;
import "dart:sky" as sky;

abstract class AnimationDelegate {
  void updateAnimation(double t);
}

class AnimationTimer {
  final AnimationDelegate _delegate;
  double _startTime = 0.0;
  double _duration = 0.0;
  int _animationId = 0;

  AnimationTimer(this._delegate);

  void start(double duration) {
    if (_animationId != 0)
      stop();
    _duration = duration;
    _scheduleTick();
  }

  void stop() {
    sky.window.cancelAnimationFrame(_animationId);
    _startTime = 0.0;
    _duration = 0.0;
    _animationId = 0;
  }

  void _scheduleTick() {
    assert(_animationId == 0);
    _animationId = sky.window.requestAnimationFrame(_tick);
  }

  void _tick(double timeStamp) {
    _animationId = 0;
    if (_startTime == 0.0)
      _startTime = timeStamp;
    double elapsedTime = timeStamp - _startTime;
    double t = math.max(0.0, math.min(1.0, elapsedTime / _duration));
    if (t < 1.0)
      _scheduleTick();
    else
      stop();
    _delegate.updateAnimation(t);
  }
}
