import { notFound } from 'next/navigation'
import { AppShell } from '@/components/app/app-shell'
import { requireRoleRoute } from '@/lib/role-route'
import { loadAccessibleTrip, loadWorkspacePayload } from '@/lib/data/trip-page'
import { resolveLanguagePrefs } from '@/lib/domain/languages'
import { EMPTY_COMPLETION } from '@/lib/domain/status'
import { CarrierTripView } from './carrier-trip-view'

/** Carrier Dispatch Trip View (CD) — `/cd-trip-workspace/<trip number>`. */
export default async function Page({
  params,
  searchParams,
}: {
  params: Promise<{ ref: string }>
  searchParams: Promise<{ tab?: string; permit?: string }>
}) {
  const { user, profile } = await requireRoleRoute('carrier')
  const { ref } = await params
  const { tab, permit } = await searchParams
  const trip = await loadAccessibleTrip(user, decodeURIComponent(ref))
  if (!trip) notFound()
  const d = await loadWorkspacePayload(user, trip)
  const languagePrefs = resolveLanguagePrefs(profile)
  return (
    <AppShell profile={profile}>
      <CarrierTripView
        trip={trip}
        myTrips={d.myTrips}
        myRole={d.myParticipant?.role ?? null}
        myUserId={user.id}
        myAccountRole={user.role}
        myAccountCreatedAt={profile.created_at}
        initialTab={tab}
        initialPermitId={permit}
        participants={d.participants}
        documents={d.documents}
        signedUrls={d.signedUrls}
        permits={d.permits}
        warnings={d.warnings}
        chat={d.chat}
        events={d.events}
        requests={d.requests}
        myCompletion={d.completions[trip.id] ?? EMPTY_COMPLETION}
        completions={d.completions}
        shareChat={d.shareChat}
        routeCredits={d.routeCredits}
        chatLanguages={languagePrefs.languages}
        primaryLanguage={languagePrefs.primary}
        contacts={d.contacts}
      />
    </AppShell>
  )
}
