/**
 * Jetable. Une tâche marquée « manquée » reste-t-elle visible par la personne
 * qui la doit ? `markMissedAsOf` promet que oui : « an undone task stays open
 * and can still be done ».
 */
import { and, eq, isNotNull, sql } from "drizzle-orm"

import { db } from "@/lib/db/client"
import { taskInstances } from "@/lib/db/schema"
import { myTasks } from "@/lib/services/tasks"

const TODAY = "2026-08-04"

const [victim] = await db
  .select({
    id: taskInstances.id,
    person: taskInstances.assigneePersonId,
    due: taskInstances.dueDate,
    status: taskInstances.status,
  })
  .from(taskInstances)
  .where(
    and(
      eq(taskInstances.status, "missed"),
      isNotNull(taskInstances.assigneePersonId),
    ),
  )
  .limit(1)

if (!victim) throw new Error("aucune instance manquée")
console.log("cobaye :", victim)

const user = {
  personId: victim.person!,
  employeeCode: "",
  name: "",
  positionTitle: null,
  department: null,
  level: null,
  tier: "staff" as const,
  language: "en" as const,
}

const seen = async (view: "day" | "week" | "month") => {
  const list = await myTasks(user, view, TODAY)
  return [...list.rows, ...list.overdue].some((r) => r.id === victim.id)
}

for (const view of ["day", "week", "month"] as const) {
  console.log(`missed, vue ${view} :`, await seen(view))
}

// Même ligne, même date, seul le statut change.
await db.update(taskInstances).set({ status: "todo" }).where(eq(taskInstances.id, victim.id))
for (const view of ["day", "week", "month"] as const) {
  console.log(`todo,   vue ${view} :`, await seen(view))
}

await db.update(taskInstances).set({ status: "missed" }).where(eq(taskInstances.id, victim.id))

const total = await db
  .select({ n: sql<number>`count(*)::int` })
  .from(taskInstances)
  .where(and(eq(taskInstances.status, "missed"), isNotNull(taskInstances.assigneePersonId)))
console.log("instances manquées avec un responsable :", total[0]?.n)

process.exit(0)
