import { cache } from 'react';

import { createAccountsApi } from '@kit/accounts/api';
import { getSupabaseServerClient } from '@kit/supabase/server-client';

export type Accounts = Awaited<ReturnType<typeof loadAccounts>>;

/**
 * @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 loadAccounts = cache(accountsLoader);

export async function loadCurrentUserAccounts() {
  const client = getSupabaseServerClient();
  const {
    data: { user },
  } = await client.auth.getUser();
  return user?.identities?.[0]?.id ? await loadAccounts() : [];
}

async function accountsLoader() {
  const client = getSupabaseServerClient();
  const api = createAccountsApi(client);

  return api.loadUserAccounts();
}
