// src/lib/api/calls.ts
// API pour les appels audio/vidéo WebRTC côté tenant et côté client

import { api } from "@/src/lib/api/client"
import { customerPortalApi } from "@/src/lib/api/customer-portal-client"

export type CallSession = {
  id: number
  case_id: number
  room_name: string
  call_type: "audio" | "video"
  initiator_side: "tenant" | "customer"
  initiator_name: string
  status: "active" | "ended"
  created_at: string
}

// ── Tenant ─────────────────────────────────────────────────────────────────────

export function getTenantActiveCall(caseId: number): Promise<CallSession | null> {
  return api.request(`/cases/${caseId}/calls/active/`)
}

export function startTenantCall(
  caseId: number,
  call_type: "audio" | "video"
): Promise<CallSession> {
  return api.request(`/cases/${caseId}/calls/`, {
    method: "POST",
    body: JSON.stringify({ call_type }),
  })
}

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

// ── Customer portal ─────────────────────────────────────────────────────────────

export function getCustomerActiveCall(caseId: number): Promise<CallSession | null> {
  return customerPortalApi.request(`/customer-portal/cases/${caseId}/calls/active/`)
}

export function startCustomerCall(
  caseId: number,
  call_type: "audio" | "video"
): Promise<CallSession> {
  return customerPortalApi.request(`/customer-portal/cases/${caseId}/calls/`, {
    method: "POST",
    body: JSON.stringify({ call_type }),
  })
}

export function endCustomerCall(caseId: number, callId: number): Promise<void> {
  return customerPortalApi.request(
    `/customer-portal/cases/${caseId}/calls/${callId}/`,
    { method: "DELETE" }
  )
}

// ── WebRTC Signaling ───────────────────────────────────────────────────────────

export type CallSignal = {
  id: number
  status: "active" | "ended"
  offer_sdp: string
  answer_sdp: string
  ice_initiator: RTCIceCandidateInit[]
  ice_peer: RTCIceCandidateInit[]
}

export function getCallSignal(
  call: CallSession,
  side: "tenant" | "customer"
): Promise<CallSignal> {
  if (side === "tenant") {
    return api.request(`/cases/${call.case_id}/calls/${call.id}/signal/`)
  }
  return customerPortalApi.request(
    `/customer-portal/cases/${call.case_id}/calls/${call.id}/signal/`
  )
}

export function patchCallSignal(
  call: CallSession,
  side: "tenant" | "customer",
  data: Partial<{
    offer_sdp: string
    answer_sdp: string
    add_ice_initiator: RTCIceCandidateInit[]
    add_ice_peer: RTCIceCandidateInit[]
  }>
): Promise<CallSignal> {
  if (side === "tenant") {
    return api.request(`/cases/${call.case_id}/calls/${call.id}/signal/`, {
      method: "PATCH",
      body: JSON.stringify(data),
    })
  }
  return customerPortalApi.request(
    `/customer-portal/cases/${call.case_id}/calls/${call.id}/signal/`,
    { method: "PATCH", body: JSON.stringify(data) }
  )
}
