/** Ma vérification du résultat combiné, sur données réelles. */
import { eq, isNotNull, sql } from "drizzle-orm"

import { db } from "@/lib/db/client"
import { people, taskInstances } from "@/lib/db/schema"
import { myTasks } from "@/lib/services/tasks"
import { availableActions } from "@/lib/task-actions"
import type { SignedIn } from "@/lib/services/session"

const TODAY = "2026-08-04"

// Une personne qui doit du travail manqué et ancien.
const [owner] = await db
  .select({ id: taskInstances.assigneePersonId, n: sql<number>`count(*)::int` })
  .from(taskInstances)
  .where(sql`${taskInstances.status} = 'missed' and ${taskInstances.dueDate} < ${TODAY}`)
  .groupBy(taskInstances.assigneePersonId)
  .orderBy(sql`count(*) desc`)
  .limit(1)
if (!owner?.id) throw new Error("aucun débiteur")

const [who] = await db
  .select({ name: people.firstName, code: people.employeeCode })
  .from(people)
  .where(eq(people.id, owner.id))
console.log(`cobaye : ${who?.code}, ${owner.n} tâches manquées anciennes`)

const user: SignedIn = {
  personId: owner.id,
  employeeCode: "",
  name: "",
  positionTitle: null,
  department: null,
  level: null,
  tier: "staff",
  language: "en",
}

for (const view of ["day", "week", "month"] as const) {
  const list = await myTasks(user, view, TODAY)
  const carried = list.overdue.filter((r) => r.status === "missed").length
  console.log(`vue ${view.padEnd(6)} : ${carried} manquées reportées visibles`)
}

// Et peut-elle les terminer ?
const list = await myTasks(user, "day", TODAY)
const one = list.overdue.find((r) => r.status === "missed")
if (one) {
  const actions = availableActions("missed", ["assignee"])
  console.log("ce que l'exécutant peut faire :", actions.map((a) => `${a.id}${a.primary ? "*" : ""}`))
  console.log("ce que son responsable peut faire :", availableActions("missed", ["manager_of_dept"]).map((a) => a.id))
  console.log("ce qu'un inconnu peut faire :", availableActions("missed", []).map((a) => a.id))
}

void isNotNull
process.exit(0)
