/**
 * Jetable. Un responsable qui n'est pas le contrôleur d'une ligne se voit-il
 * proposer Approve ? La liste ne doit rien accorder au grade.
 */
import { eq } from "drizzle-orm"

import { db } from "@/lib/db/client"
import { people, positions, departments, recurringTemplates, taskInstances } from "@/lib/db/schema"
import { teamOverview } from "@/lib/services/team"
import type { SignedIn } from "@/lib/services/session"

const TODAY = "2026-08-04"

const [malai] = await db
  .select({
    id: people.id,
    dept: departments.name,
    level: positions.level,
  })
  .from(people)
  .innerJoin(positions, eq(positions.id, people.positionId))
  .innerJoin(departments, eq(departments.id, positions.departmentId))
  .where(eq(people.username, "malai"))

if (!malai) throw new Error("malai introuvable")
console.log("responsable :", malai)

const manager: SignedIn = {
  personId: malai.id,
  employeeCode: "",
  name: "",
  positionTitle: null,
  department: malai.dept,
  level: malai.level,
  tier: "manager",
  language: "en",
}

const view = await teamOverview(manager, { today: TODAY })
if (!view) throw new Error("aucune vue")

// Pour chaque ligne en attente : est-elle contrôlée par elle, et que propose-t-on ?
for (const row of view.waitingCheck) {
  const [t] = await db
    .select({ checker: recurringTemplates.checkerPersonId })
    .from(taskInstances)
    .innerJoin(recurringTemplates, eq(recurringTemplates.id, taskInstances.recurringTemplateId))
    .where(eq(taskInstances.id, row.id))
  console.log({
    tache: row.description.slice(0, 34),
    elleEstControleur: t?.checker === malai.id,
    actions: row.actions.map((a) => a.id),
  })
}

// Et la contre-épreuve : la même personne, vue depuis un service qui n'est pas
// le sien, ne doit rien voir du tout.
const elsewhere = await teamOverview(manager, {
  departments: ["Top management"],
  today: TODAY,
})
console.log("departement force :", elsewhere?.departments)

process.exit(0)
