// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
part of dart.math;

/**
 * A base class for representing two-dimensional axis-aligned rectangles.
 *
 * This rectangle uses a left-handed Cartesian coordinate system, with x
 * directed to the right and y directed down, as per the convention in 2D
 * computer graphics.
 *
 * See also:
 *    [W3C Coordinate Systems Specification](http://www.w3.org/TR/SVG/coords.html#InitialCoordinateSystem).
 *
 * The rectangle is the set of points with representable coordinates greater
 * than or equal to left/top, and with distance to left/top no greater than
 * width/height (to the limit of the precision of the coordinates).
 */
abstract class _RectangleBase<T extends num> {
  const _RectangleBase();

  /** The x-coordinate of the left edge. */
  T get left;
  /** The y-coordinate of the top edge. */
  T get top;
  /** The width of the rectangle. */
  T get width;
  /** The height of the rectangle. */
  T get height;

  /** The x-coordinate of the right edge. */
  T get right => left + width;
  /** The y-coordinate of the bottom edge. */
  T get bottom => top + height;

  String toString() {
    return 'Rectangle ($left, $top) $width x $height';
  }

  bool operator ==(other) {
    if (other is! Rectangle) return false;
    return left == other.left &&
        top == other.top &&
        right == other.right &&
        bottom == other.bottom;
  }

  int get hashCode => _JenkinsSmiHash.hash4(
      left.hashCode, top.hashCode, right.hashCode, bottom.hashCode);

  /**
   * Computes the intersection of `this` and [other].
   *
   * The intersection of two axis-aligned rectangles, if any, is always another
   * axis-aligned rectangle.
   *
   * Returns the intersection of this and `other`, or `null` if they don't
   * intersect.
   */
  Rectangle<T> intersection(Rectangle<T> other) {
    var x0 = max(left, other.left);
    var x1 = min(left + width, other.left + other.width);

    if (x0 <= x1) {
      var y0 = max(top, other.top);
      var y1 = min(top + height, other.top + other.height);

      if (y0 <= y1) {
        return new Rectangle<T>(x0, y0, x1 - x0, y1 - y0);
      }
    }
    return null;
  }

  /**
   * Returns true if `this` intersects [other].
   */
  bool intersects(Rectangle<num> other) {
    return (left <= other.left + other.width &&
        other.left <= left + width &&
        top <= other.top + other.height &&
        other.top <= top + height);
  }

  /**
   * Returns a new rectangle which completely contains `this` and [other].
   */
  Rectangle<T> boundingBox(Rectangle<T> other) {
    var right = max(this.left + this.width, other.left + other.width);
    var bottom = max(this.top + this.height, other.top + other.height);

    var left = min(this.left, other.left);
    var top = min(this.top, other.top);

    return new Rectangle<T>(left, top, right - left, bottom - top);
  }

  /**
   * Tests whether `this` entirely contains [another].
   */
  bool containsRectangle(Rectangle<num> another) {
    return left <= another.left &&
        left + width >= another.left + another.width &&
        top <= another.top &&
        top + height >= another.top + another.height;
  }

  /**
   * Tests whether [another] is inside or along the edges of `this`.
   */
  bool containsPoint(Point<num> another) {
    return another.x >= left &&
        another.x <= left + width &&
        another.y >= top &&
        another.y <= top + height;
  }

  Point<T> get topLeft => new Point<T>(this.left, this.top);
  Point<T> get topRight => new Point<T>(this.left + this.width, this.top);
  Point<T> get bottomRight =>
      new Point<T>(this.left + this.width, this.top + this.height);
  Point<T> get bottomLeft => new Point<T>(this.left, this.top + this.height);
}

/**
 * A class for representing two-dimensional rectangles whose properties are
 * immutable.
 */
class Rectangle<T extends num> extends _RectangleBase<T> {
  final T left;
  final T top;
  final T width;
  final T height;

  /**
   * Create a rectangle spanned by `(left, top)` and `(left+width, top+height)`.
   *
   * The rectangle contains the points
   * with x-coordinate between `left` and `left + width`, and
   * with y-coordinate between `top` and `top + height`, both inclusive.
   *
   * The `width` and `height` should be non-negative.
   * If `width` or `height` are negative, they are clamped to zero.
   *
   * If `width` and `height` are zero, the "rectangle" comprises only the single
   * point `(left, top)`.
   */
  const Rectangle(this.left, this.top, T width, T height)
      : this.width = (width < 0) ? -width * 0 : width, // Inline _clampToZero.
        this.height = (height < 0) ? -height * 0 : height;

  /**
   * Create a rectangle spanned by the points [a] and [b];
   *
   * The rectangle contains the points
   * with x-coordinate between `a.x` and `b.x`, and
   * with y-coordinate between `a.y` and `b.y`, both inclusive.
   *
   * If the distance between `a.x` and `b.x` is not representable
   * (which can happen if one or both is a double),
   * the actual right edge might be slightly off from `max(a.x, b.x)`.
   * Similar for the y-coordinates and the bottom edge.
   */
  factory Rectangle.fromPoints(Point<T> a, Point<T> b) {
    T left = min(a.x, b.x);
    T width = max(a.x, b.x) - left;
    T top = min(a.y, b.y);
    T height = max(a.y, b.y) - top;
    return new Rectangle<T>(left, top, width, height);
  }
}

/**
 * A class for representing two-dimensional axis-aligned rectangles with mutable
 * properties.
 */
class MutableRectangle<T extends num> extends _RectangleBase<T>
    implements Rectangle<T> {
  /**
   * The x-coordinate of the left edge.
   *
   * Setting the value will move the rectangle without changing its width.
   */
  T left;
  /**
   * The y-coordinate of the left edge.
   *
   * Setting the value will move the rectangle without changing its height.
   */
  T top;
  T _width;
  T _height;

  /**
   * Create a mutable rectangle spanned by `(left, top)` and
   * `(left+width, top+height)`.
   *
   * The rectangle contains the points
   * with x-coordinate between `left` and `left + width`, and
   * with y-coordinate between `top` and `top + height`, both inclusive.
   *
   * The `width` and `height` should be non-negative.
   * If `width` or `height` are negative, they are clamped to zero.
   *
   * If `width` and `height` are zero, the "rectangle" comprises only the single
   * point `(left, top)`.
   */
  MutableRectangle(this.left, this.top, T width, T height)
      : this._width = (width < 0) ? _clampToZero<T>(width) : width,
        this._height = (height < 0) ? _clampToZero<T>(height) : height;

  /**
   * Create a mutable rectangle spanned by the points [a] and [b];
   *
   * The rectangle contains the points
   * with x-coordinate between `a.x` and `b.x`, and
   * with y-coordinate between `a.y` and `b.y`, both inclusive.
   *
   * If the distance between `a.x` and `b.x` is not representable
   * (which can happen if one or both is a double),
   * the actual right edge might be slightly off from `max(a.x, b.x)`.
   * Similar for the y-coordinates and the bottom edge.
   */
  factory MutableRectangle.fromPoints(Point<T> a, Point<T> b) {
    T left = min(a.x, b.x);
    T width = max(a.x, b.x) - left;
    T top = min(a.y, b.y);
    T height = max(a.y, b.y) - top;
    return new MutableRectangle<T>(left, top, width, height);
  }

  T get width => _width;

  /**
   * Sets the width of the rectangle.
   *
   * The width must be non-negative.
   * If a negative width is supplied, it is clamped to zero.
   *
   * Setting the value will change the right edge of the rectangle,
   * but will not change [left].
   */
  void set width(T width) {
    if (width < 0) width = _clampToZero<T>(width);
    _width = width;
  }

  T get height => _height;

  /**
   * Sets the height of the rectangle.
   *
   * The height must be non-negative.
   * If a negative height is supplied, it is clamped to zero.
   *
   * Setting the value will change the bottom edge of the rectangle,
   * but will not change [top].
   */
  void set height(T height) {
    if (height < 0) height = _clampToZero<T>(height);
    _height = height;
  }
}

/**
 * Converts a negative [int] or [double] to a zero-value of the same type.
 *
 * Returns `0` if value is int, `0.0` if value is double.
 */
T _clampToZero<T extends num>(T value) {
  assert(value < 0);
  return -value * 0;
}
