import { api } from "./client"

export type Role = { id: number; label: string }

export type TenantLite = {
  id: number
  name: string
  slug: string
  status: string
}

export type UserLite = {
  id: number
  username: string
  email: string
  first_name: string
  last_name: string
  full_name: string
}

export type Membership = {
  id: number
  tenant: TenantLite | number
  user: UserLite | number
  roles: number[]
  status: "invited" | "active" | "suspended"
  is_owner: boolean
  created_at: string
}

export function listRoles(): Promise<Role[]> {
  return api.request("/roles/")
}

export function listMembershipsByUser(userId: number): Promise<Membership[]> {
  return api.request(`/memberships/?user=${userId}`)
}

export function listMembershipsByTenant(tenantId: number): Promise<Membership[]> {
  return api.request(`/memberships/?tenant=${tenantId}`)
}

export function createMembership(payload: {
  tenant: number
  user: number
  roles?: number[]
  status?: "invited" | "active" | "suspended"
  is_owner?: boolean
}): Promise<Membership> {
  return api.request("/memberships/", {
    method: "POST",
    body: JSON.stringify(payload),
  })
}

export function updateMembership(
  id: number,
  payload: Partial<{
    roles: number[]
    status: "invited" | "active" | "suspended"
    is_owner: boolean
  }>
): Promise<Membership> {
  return api.request(`/memberships/${id}/`, {
    method: "PATCH",
    body: JSON.stringify(payload),
  })
}

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