/** Jetable. Rôles ARIA, repli des paramètres illisibles, tri, et tuile vide. */
import { get, signIn, visible } from "./probe"

const admin = await signIn("narin", "admin1")
const D = "dept=Top+management"

function roles(html: string) {
  return {
    tablist: (html.match(/role="tablist"/g) ?? []).length,
    tab: (html.match(/role="tab"/g) ?? []).length,
    tabpanel: (html.match(/role="tabpanel"/g) ?? []).length,
    selected: (html.match(/aria-selected="true"/g) ?? []).length,
    ariaControls: (html.match(/aria-controls="team-panel"/g) ?? []).length,
    labelledby: (html.match(/aria-labelledby="team-tab-(\w+)"/) ?? [])[1],
    expandButtons: (html.match(/aria-expanded="false"/g) ?? []).length,
  }
}

console.log("=== rôles ===")
for (const tab of ["late", "today", "waiting"]) {
  const r = await get(admin, `/team?${D}&tab=${tab}`)
  console.log(tab, roles(r.body))
}

console.log("\n=== repli d'un paramètre illisible ===")
const banana = await get(admin, `/team?${D}&tab=banana`)
const late = await get(admin, `/team?${D}&tab=late`)
console.log(
  "tab=banana rend le même panneau que tab=late :",
  roles(banana.body).labelledby === roles(late.body).labelledby,
  "→",
  roles(banana.body).labelledby,
)
const zzz = await get(admin, `/team?${D}&tab=late&sort=zzz`)
const oldest = await get(admin, `/team?${D}&tab=late&sort=oldest`)
console.log("sort=zzz identique à sort=oldest :", zzz.body.length === oldest.body.length)

console.log("\n=== le tri change-t-il l'ordre ===")
function firstDuties(html: string) {
  const body = (html.match(/<tbody[\s\S]*?<\/tbody>/) ?? [""])[0]
  return [...body.matchAll(/<span>([^<]{3,60})<\/span>/g)].map((m) => m[1]).slice(0, 8)
}
for (const sort of ["oldest", "most", "person"]) {
  const r = await get(admin, `/team?${D}&tab=late&sort=${sort}`)
  console.log(sort.padEnd(7), firstDuties(r.body).join(" / "))
}

console.log("\n=== une tuile de complétion vide, si un département en a une ===")
const depts = [
  "IT",
  "Production",
  "Costing",
  "Stone Gluing",
  "J-Work 2",
  "Polishing 1",
  "Quality Control",
  "MD Office",
]
for (const d of depts) {
  const r = await get(admin, `/team?dept=${encodeURIComponent(d)}`)
  const text = visible(r.body)
  const empty = text.includes("Nothing was due in the last 30 days")
  const pct = (text.match(/\n(\d+)\n%/) ?? [])[1]
  console.log(d.padEnd(18), empty ? "tuile vide" : `${pct}%`)
}
