interface Point{
    x: number,
    y: number
}

export default class BoundsItem {
  x: number
  y: number
  width: number
  height: number

  constructor(x: number, y: number, width: number, height: number) {
    this.x = x
    this.y = y
    this.width = width
    this.height = height
  }

  static getBoundsItemToExpand(): BoundsItem {
    return new BoundsItem(Number.MAX_VALUE, Number.MAX_VALUE, -1, -1)
  }

  static boundsIntersect(b1: BoundsItem, b2: BoundsItem): boolean {
    return b1.x <= b2.x + b2.width && b2.x <= b1.x + b1.width && b1.y <= b2.y + b2.height && b2.y <= b1.y + b1.height
  }
  isEmpty() {
    return this.width < 0
  }
  expandByPoint(x, y) {
    let minX, minY, maxX, maxY
    if (this.isEmpty()) {
      minX = maxX = x
      minY = maxY = y
    } else {
      minX = this.x
      minY = this.y
      maxX = this.x + this.width
      maxY = this.y + this.height
      x < minX ? (minX = x) : x > maxX && (maxX = x)
      y < minY ? (minY = y) : y > maxY && (maxY = y)
    }
    this.x = minX
    this.y = minY
    this.width = maxX - minX
    this.height = maxY - minY
  }
}
