import type { Metadata } from 'next';

import { getPortalSession } from '@/lib/portal/auth';
import { getPortalDashboard } from '@/lib/services/portal.service';
import { PortalHeader } from '@/components/portal/portal-header';
import { PortalNav } from '@/components/portal/portal-nav';

export const metadata: Metadata = {
  title: {
    default: 'Client Portal',
    template: '%s | Client Portal',
  },
};

export default async function PortalLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  // This layout wraps all portal routes including login/verify
  // We can't easily check pathname in a server layout, so we attempt
  // to get the session and pass it down — login/verify pages handle their own
  // redirect logic independently.
  const session = await getPortalSession().catch(() => null);

  // For authenticated routes we need client info for the header.
  // If session is absent, children (login/verify pages) handle their own redirect.
  let clientName = '';
  let portName = 'Client Portal';
  let portLogoUrl: string | null = null;

  if (session) {
    const dashboard = await getPortalDashboard(session.clientId, session.portId).catch(() => null);
    if (dashboard) {
      clientName = dashboard.client.fullName;
      portName = dashboard.port.name;
      portLogoUrl = dashboard.port.logoUrl;
    }
  }

  return (
    <div className="min-h-screen bg-gray-50">
      {session && (
        <>
          <PortalHeader
            portName={portName}
            portLogoUrl={portLogoUrl}
            clientName={clientName}
          />
          <PortalNav />
        </>
      )}
      <main className={session ? 'max-w-5xl mx-auto px-4 sm:px-6 py-8' : ''}>
        {children}
      </main>
    </div>
  );
}
