import { redirect } from 'next/navigation'
import { getProfile, getSessionUser } from '@/lib/auth'
import { createAdminClient } from '@/lib/supabase/admin'
import { AppShell } from '@/components/app/app-shell'
import { BackLink } from '@/components/app/back-link'
import { SettingsForm } from './settings-form'
import { BrokerDefaults } from './broker-defaults'
import { resolveLanguagePrefs } from '@/lib/domain/languages'
import { getCompanyContext } from '@/lib/data/companies'
import { CompanyAccessCard } from './company-access-card'

/** Settings — UI preview; brokers also manage their permit-handling defaults here. */
export default async function SettingsPage() {
  const user = await getSessionUser()
  if (!user) redirect('/login')
  const profile = (await getProfile())!

  // Broker defaults (order-intake doc §22) — tolerant until migration 0009.
  let brokerDefaults: { policy: string; payment: string } | null = null
  if (user.role === 'broker') {
    const admin = createAdminClient()
    const { data } = await admin
      .from('broker_pages')
      .select('*')
      .eq('owner_id', user.id)
      .maybeSingle()
    if (data) {
      brokerDefaults = {
        policy: data.default_permit_policy ?? 'ask',
        payment: data.default_payment_party ?? 'ask',
      }
    }
  }

  // Company verification (Task 89) — brokers and carriers/dispatchers only;
  // Nash: "the drivers do not need any validation from the carrier."
  const companyCtx =
    user.role === 'broker' || user.role === 'dispatcher' ? await getCompanyContext(user.id) : null

  return (
    <AppShell profile={profile}>
      <main className="mx-auto max-w-2xl px-4 py-8">
        <BackLink />
        <h1 className="mt-3 text-2xl font-bold tracking-tight">Settings</h1>
        <p className="mt-1 text-sm text-neutral-500">Notifications, language, and account options.</p>
        {companyCtx && (
          <div className="mt-6">
            <CompanyAccessCard
              available={companyCtx.available}
              company={companyCtx.company}
              membership={companyCtx.membership}
              claim={companyCtx.claim}
            />
          </div>
        )}
        {brokerDefaults && (
          <BrokerDefaults
            initialPolicy={brokerDefaults.policy as 'synchron_required' | 'upload_allowed' | 'ask'}
            initialPayment={brokerDefaults.payment as 'broker' | 'carrier' | 'ask'}
          />
        )}
        <SettingsForm
          userId={user.id}
          initialLanguages={resolveLanguagePrefs(profile).languages}
          initialPrimary={resolveLanguagePrefs(profile).primary}
        />
      </main>
    </AppShell>
  )
}
