// src/lib/api/customer-memberships.ts
import { api } from "@/src/lib/api/client"

export type CustomerMembershipRole = "owner" | "manager" | "viewer"
export type CustomerMembershipStatus = "invited" | "active" | "suspended"

export type CustomerMembership = {
  id: number
  customer: number
  user: number
  user_label: string
  role: CustomerMembershipRole
  status: CustomerMembershipStatus
  is_primary_contact: boolean
  created_at: string
}

export type CustomerMembershipCreate = {
  email: string
  role?: CustomerMembershipRole
  is_primary_contact?: boolean
  username?: string
  first_name?: string
  last_name?: string
  telephone?: string
  departement?: string
}

export type CustomerMembershipUpdate = Partial<{
  role: CustomerMembershipRole
  status: CustomerMembershipStatus
  is_primary_contact: boolean
}>

export function listCustomerMemberships(customerId: number): Promise<CustomerMembership[]> {
  return api.request(`/customers/${customerId}/memberships/`, { method: "GET" })
}

export function createCustomerMembership(
  customerId: number,
  payload: CustomerMembershipCreate
): Promise<CustomerMembership> {
  return api.request(`/customers/${customerId}/memberships/`, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(payload),
  })
}

export function updateCustomerMembership(
  customerId: number,
  membershipId: number,
  payload: CustomerMembershipUpdate
): Promise<CustomerMembership> {
  return api.request(`/customers/${customerId}/memberships/${membershipId}/`, {
    method: "PATCH",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(payload),
  })
}

export function deleteCustomerMembership(customerId: number, membershipId: number): Promise<void> {
  return api.request(`/customers/${customerId}/memberships/${membershipId}/`, { method: "DELETE" })
}
