import { cache } from 'react';

import { createAccountsApi } from '@kit/accounts/api';
import { getSupabaseServerClient } from '@kit/supabase/server-client';
import { requireUserInServerComponent } from '@/lib/server/require-user-in-server-component';

export type UserAccount = Awaited<ReturnType<typeof loadUserAccount>>;

/**
 * @name loadUserAccount
 * @description
 * Load the user account. It's a cached per-request function that fetches the user workspace data.
 * It can be used across the server components to load the user workspace data.
 */
export const loadUserAccount = cache(accountLoader);

export async function loadCurrentUserAccount() {
  const user = await requireUserInServerComponent();
  return user?.identities?.[0]?.id
    ? await loadUserAccount(user?.identities?.[0]?.id)
    : null;
}

async function accountLoader(accountId: string) {
  const client = getSupabaseServerClient();
  const api = createAccountsApi(client);

  return api.getAccount(accountId);
}
