import { cache } from 'react';

import { requireUserInServerComponent } from '@/lib/server/require-user-in-server-component';

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

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

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

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

async function hasAccountTeamMembershipLoader(
  accountId: string,
): Promise<boolean> {
  const client = getSupabaseServerClient();
  const api = createAccountsApi(client);

  return api.hasAccountTeamMembership(accountId);
}
