import type { Metadata } from 'next'
import { headers } from 'next/headers'
import { redirect } from 'next/navigation'
import { resolveProjectContext } from '@/app/(organization)/[org]/cache'
import { projectsService } from '@/app/api/projects/service'
import { proposalsService } from '@/app/api/proposals/service'
import { createMetadata } from '@/lib/metadata'
import type { Role } from '@/types'
import { ProposalsClient } from './page.client'

export const metadata: Metadata = createMetadata({
  title: 'Proposals',
  description: 'Draft and send client proposals.',
  openGraph: {
    images: ['/api/og?page=Proposals'],
  },
  twitter: {
    images: ['/api/og?page=Proposals'],
  },
})

export default async function Proposals({
  params,
}: PageProps<'/[org]/[project]/proposals'>) {
  const { org, project: projectSlug } = await params
  const {
    project: currentProject,
    orgMember,
    role,
  } = await resolveProjectContext(org, projectSlug)

  if (!role.authorize({ proposal: ['read'] }).success) {
    redirect(
      `/error/403?message=${encodeURIComponent('You do not have permission to view proposals')}`
    )
  }

  const proposalList = await proposalsService.listByProject(
    currentProject.id,
    await headers()
  )

  const canCreate = role.authorize({ proposal: ['create'] }).success
  const settings = await projectsService.getSettings(
    orgMember.organizationId,
    currentProject.id
  )

  return (
    <ProposalsClient
      canCreate={canCreate}
      isClientInvolved={settings.clientInvolvement.proposals === 'on'}
      orgSlug={org}
      projectSlug={projectSlug}
      proposals={proposalList}
      role={orgMember.role as Role}
    />
  )
}
