class PaginateTable {
  constructor(url) {
    this.page = 0;
    this.items = [];
    this.url = url;
    this.headers = [];
    this.search_query="";
  }

  async contents() {
    if(this.page < 0) this.page = 0;

    let url = `${this.url}?page=${this.page}`;

    if(this.search_query !== "") {
      this.page = 0;
      url += `&search=${this.search_query}`
    }

    const resp = await fetch(url);
    console.assert(resp.status == 200, "failed to get it");

    const items = await resp.json();

    if(items) {
      this.items = items;
      this.headers = Object.keys(this.items[0]);
    }

    return this.items;
  }
}

class ForeverScroll {
  constructor(url) {
    this.page = 0;
    this.items = [];
    this.url = url;
    this.end = false;
  }

  async init() {
    const resp = await fetch(this.url);
    console.assert(resp.status == 200, "failed to get it");

    const items = await resp.json();
    if(items) this.items = items;
  }

  async load() {
    this.page += 1
    let url = `${this.url}?page=${this.page}`;

    const resp = await fetch(url);
    console.assert(resp.status == 200, "failed to get it");

    const items = await resp.json();

    if(items) {
      this.items.push(...items);
    } else {
      this.end = true;
    }
  }
}

const GetJson = async (url) => {
  const resp = await fetch(url);
  console.assert(resp.status == 200, "failed to get it");
  return await resp.json();
}

const ConfirmDelete = async (table, obj_id) => {
  if(confirm("Are you sure?")) {
    await fetch("/api/admin/table/" + table + "/" + obj_id,
      { method: "DELETE" });
    window.location = "/admin/table/" + table;
  } else {
    return false;
  }
}

const UrlId = () => {
  let url = new URL(window.location.href);
  let parts = url.pathname.split("/");

  if(window.location.href.endsWith("/")) {
    return parts[parts.length - 2];
  } else {
    return parts[parts.length - 1];
  }
}
