// src/lib/api/tenant-messages.ts
// Messagerie côté tenant (agents / admins)
import { api } from "@/src/lib/api/client"
import type { CaseMessage } from "@/src/lib/api/customer-portal"

export type TenantInboxThread = {
  case_id: number
  case_reference?: string | null
  case_title?: string | null
  customer_name?: string | null
  last_message: CaseMessage
  unread: boolean
}

// ── Inbox ──────────────────────────────────────────────────────────────────
export function listTenantInboxThreads(params?: {
  q?: string
  unread?: boolean
}): Promise<TenantInboxThread[]> {
  const qs = new URLSearchParams()
  if (params?.q) qs.set("q", params.q)
  if (params?.unread) qs.set("unread", "1")
  const url = qs.toString() ? `/cases/messages/inbox/?${qs}` : "/cases/messages/inbox/"
  return api.request(url, { method: "GET" })
}

// ── Messages d'un dossier ──────────────────────────────────────────────────
export function listTenantCaseMessages(
  caseId: number,
  visibility?: "shared" | "internal" | ""
): Promise<CaseMessage[]> {
  const qs = new URLSearchParams()
  if (visibility) qs.set("visibility", visibility)
  const url = qs.toString()
    ? `/cases/${caseId}/messages/?${qs}`
    : `/cases/${caseId}/messages/`
  return api.request(url, { method: "GET" })
}

export async function sendTenantCaseMessage(
  caseId: number,
  payload: {
    body: string
    visibility?: "shared" | "internal"
    action_required?: boolean
    files?: File[]
  }
): Promise<CaseMessage> {
  const fd = new FormData()
  fd.append("body", payload.body)
  fd.append("visibility", payload.visibility ?? "shared")
  if (payload.action_required) fd.append("action_required", "1")
  for (const f of payload.files ?? []) fd.append("files", f)
  return api.request(`/cases/${caseId}/messages/`, { method: "POST", body: fd as any })
}

export function patchTenantCaseMessage(
  caseId: number,
  msgId: number,
  body: string
): Promise<CaseMessage> {
  return api.request(`/cases/${caseId}/messages/${msgId}/`, {
    method: "PATCH",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ body }),
  })
}

export function deleteTenantCaseMessage(caseId: number, msgId: number): Promise<void> {
  return api.request(`/cases/${caseId}/messages/${msgId}/`, { method: "DELETE" })
}

export function markTenantMessageRead(caseId: number, msgId: number): Promise<any> {
  return api.request(`/cases/${caseId}/messages/${msgId}/read/`, { method: "POST" })
}

// ── Typing indicator ────────────────────────────────────────────────────────
export function getTenantTyping(caseId: number): Promise<{ typing: string[] }> {
  return api.request(`/cases/${caseId}/typing/`, { method: "GET" })
}
export function setTenantTyping(caseId: number): Promise<any> {
  return api.request(`/cases/${caseId}/typing/`, { method: "POST" })
}
export function clearTenantTyping(caseId: number): Promise<any> {
  return api.request(`/cases/${caseId}/typing/`, { method: "DELETE" })
}
