“use strict”;

const HTMLElementImpl = require(“./HTMLElement-impl”).implementation; const idlUtils = require(“../generated/utils”); const childrenByHTMLLocalName = require(“../helpers/traversal”).childrenByHTMLLocalName; const createHTMLCollection = require(“../../living/html-collection”).create; const DOMException = require(“../../web-idl/DOMException”);

class HTMLTableSectionElementImpl extends HTMLElementImpl {

get rows() {
  if (!this._rows) {
    this._rows = createHTMLCollection(this, () => childrenByHTMLLocalName(this, "tr"));
  }
  return this._rows;
}

insertRow(index) {
  if (index < -1 || index > this.rows.length) {
    throw new DOMException(DOMException.INDEX_SIZE_ERR,
      "Cannot insert a row at an index that is less than -1 or greater than the number of existing rows");
  }

  const tr = this._ownerDocument.createElement("tr");

  if (index === -1 || index === this.rows.length) {
    this.appendChild(tr);
  } else {
    const beforeTR = idlUtils.implForWrapper(this.rows[index]);
    this.insertBefore(tr, beforeTR);
  }

  return tr;
}

deleteRow(index) {
  if (index < -1 || index >= this.rows.length) {
    throw new DOMException(DOMException.INDEX_SIZE_ERR, `Cannot delete a row at index ${index}, where no row exists`);
  }

  if (index === -1) {
    if (this.rows.length > 0) {
      const tr = idlUtils.implForWrapper(this.rows[this.rows.length - 1]);
      this.removeChild(tr);
    }
  } else {
    const tr = idlUtils.implForWrapper(this.rows[index]);
    this.removeChild(tr);
  }
}

}

module.exports = {

implementation: HTMLTableSectionElementImpl

};