import DOMRectReadOnly from './DOMRectReadOnly.js';
import * as PropertySymbol from '../PropertySymbol.js';
import type IDOMRectInit from './IDOMRectInit.js';

/**
 * DOM Rect.
 *
 * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMRect
 */
export default class DOMRect extends DOMRectReadOnly {
	/**
	 * Sets x.
	 *
	 * @param value X.
	 */
	public set x(value: number) {
		this[PropertySymbol.x] = value;
	}

	/**
	 * Returns x.
	 *
	 * @returns X.
	 */
	public get x(): number {
		return this[PropertySymbol.x];
	}

	/**
	 * Sets y.
	 *
	 * @param value Y.
	 */
	public set y(value: number) {
		this[PropertySymbol.y] = value;
	}

	/**
	 * Returns y.
	 *
	 * @returns Y.
	 */
	public get y(): number {
		return this[PropertySymbol.y];
	}

	/**
	 * Sets width.
	 *
	 * @param value Width.
	 */
	public set width(value: number) {
		this[PropertySymbol.width] = value;
	}

	/**
	 * Returns width.
	 *
	 * @returns Width.
	 */
	public get width(): number {
		return this[PropertySymbol.width];
	}

	/**
	 * Sets height.
	 *
	 * @param value Height.
	 */
	public set height(value: number) {
		this[PropertySymbol.height] = value;
	}

	/**
	 * Returns height.
	 *
	 * @returns Height.
	 */
	public get height(): number {
		return this[PropertySymbol.height];
	}

	/**
	 * Returns a new DOMRect object.
	 *
	 * @param other
	 * @returns Cloned object.
	 */
	public static fromRect(other: IDOMRectInit): DOMRect {
		return new DOMRect(other.x, other.y, other.width, other.height);
	}
}
