'use server';

import { use } from 'react';

import { createAccountsApi } from '@/packages/features/accounts/src/server/api';
import { CompanyGuard } from '@/packages/features/team-accounts/src/components';
import { createTeamAccountsApi } from '@/packages/features/team-accounts/src/server/api';
import { getSupabaseServerClient } from '@/packages/supabase/src/clients/server-client';

import { PageBody } from '@kit/ui/page';
import { Trans } from '@kit/ui/trans';

import { createI18nServerInstance } from '~/lib/i18n/i18n.server';
import { withI18n } from '~/lib/i18n/with-i18n';
import {
  PAGE_VIEW_ACTION,
  createPageViewLog,
} from '~/lib/services/audit/pageView.service';

import { Dashboard } from './_components/dashboard';
import { TeamAccountLayoutPageHeader } from './_components/team-account-layout-page-header';
import { withI18n } from '~/lib/i18n/with-i18n';

interface TeamAccountHomePageProps {
  params: Promise<{ account: string }>;
}

export const generateMetadata = async () => {
  const i18n = await createI18nServerInstance();
  const title = i18n.t('teams:home.pageTitle');

  return {
    title,
  };
};

function TeamAccountHomePage({ params }: TeamAccountHomePageProps) {
  const account = use(params).account;
  const client = getSupabaseServerClient();
  const teamAccountsApi = createTeamAccountsApi(client);
  const accountsApi = createAccountsApi(client);
  const teamAccount = use(teamAccountsApi.getTeamAccount(account));
  const { memberParams, members } = use(teamAccountsApi.getMembers(account));
  const bmiThresholds = use(accountsApi.fetchBmiThresholds());
  const companyParams = use(
    teamAccountsApi.getTeamAccountParams(teamAccount.id),
  );

  use(
    createPageViewLog({
      accountId: teamAccount.id,
      action: PAGE_VIEW_ACTION.VIEW_TEAM_ACCOUNT_DASHBOARD,
    }),
  );

  return (
    <PageBody>
      <Dashboard
        teamAccount={teamAccount}
        memberParams={memberParams}
        bmiThresholds={bmiThresholds}
        members={members}
        companyParams={companyParams}
      />
    </PageBody>
  );
}

export default withI18n(CompanyGuard(TeamAccountHomePage));
