/**
 * Jetable. La contre-épreuve : on retire à la responsable le rôle de
 * contrôleur sur une consigne, et Approve doit disparaître de cette ligne
 * seulement. Puis on remet tout.
 */
import { eq } from "drizzle-orm"

import { db } from "@/lib/db/client"
import { departments, people, positions, 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")

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

const before = await teamOverview(manager, { today: TODAY })
const target = before!.waitingCheck[0]!
const [tpl] = await db
  .select({ id: recurringTemplates.id, checker: recurringTemplates.checkerPersonId })
  .from(taskInstances)
  .innerJoin(recurringTemplates, eq(recurringTemplates.id, taskInstances.recurringTemplateId))
  .where(eq(taskInstances.id, target.id))
if (!tpl) throw new Error("consigne introuvable")

// Quelqu'un d'autre, dans un autre service, devient le contrôleur.
const [other] = await db
  .select({ id: people.id })
  .from(people)
  .where(eq(people.username, "narisara"))

console.log("avant :", {
  tache: target.description.slice(0, 34),
  actions: target.actions.map((a) => a.id),
})

await db
  .update(recurringTemplates)
  .set({ checkerPersonId: other!.id })
  .where(eq(recurringTemplates.id, tpl.id))

const after = await teamOverview(manager, { today: TODAY })
const moved = after!.waitingCheck.find((r) => r.id === target.id)
console.log("après retrait du rôle :", {
  visible: Boolean(moved),
  actions: moved?.actions.map((a) => a.id) ?? null,
})
console.log(
  "les autres lignes gardent-elles Approve :",
  after!.waitingCheck
    .filter((r) => r.id !== target.id)
    .every((r) => r.actions.some((a) => a.id === "approve")),
)

await db
  .update(recurringTemplates)
  .set({ checkerPersonId: tpl.checker })
  .where(eq(recurringTemplates.id, tpl.id))

const restored = await teamOverview(manager, { today: TODAY })
console.log(
  "remis :",
  restored!.waitingCheck.find((r) => r.id === target.id)?.actions.map((a) => a.id),
)

process.exit(0)
