import { redirect } from 'next/navigation'
import { and, asc, eq } from 'drizzle-orm'
import { auth } from '@/auth'
import { db } from '@/db'
import { projects, tenantConfigs } from '@/db/schema'
import { getI18nForUserId } from '@/lib/i18n/server'
import { loadTenantConfig } from '@/lib/tenant-config-loader'
import SubmitForm from './SubmitForm'

const CONFIG_PATH = process.env.TENANT_CONFIG_PATH ?? './tenant.config.yaml'

export default async function SubmitPage() {
  const session = await auth()
  if (!session?.user?.id) redirect('/login')
  const i18n = await getI18nForUserId(session.user.id)
  const t = i18n.t

  const tenantId = session.user.tenantId

  const [config] = tenantId
    ? await db
        .select({
          submissionPromptText: tenantConfigs.submissionPromptText,
          submissionMaxChars: tenantConfigs.submissionMaxChars,
        })
        .from(tenantConfigs)
        .where(eq(tenantConfigs.tenantId, tenantId))
        .limit(1)
    : []

  const tenantConfig = loadTenantConfig(CONFIG_PATH)

  const activeProjects = tenantId
    ? await db
        .select({ id: projects.id, name: projects.name })
        .from(projects)
        .where(and(eq(projects.tenantId, tenantId), eq(projects.isActive, true)))
        .orderBy(asc(projects.name))
    : []

  return (
    <main className="min-h-screen bg-zinc-50 px-4 py-12 text-zinc-950 dark:bg-zinc-950 dark:text-zinc-100">
      <div className="mx-auto max-w-3xl">
        <h1 className="text-2xl font-semibold text-zinc-950 dark:text-white mb-2">{t('submit.title')}</h1>
        <p className="text-sm text-zinc-600 dark:text-zinc-400 mb-8">
          {t('submit.intro')}
        </p>
        <SubmitForm
          language={i18n.language}
          promptText={i18n.language === 'es' ? t('submit.promptText') : (config?.submissionPromptText ?? t('submit.promptText'))}
          maxChars={config?.submissionMaxChars ?? 4000}
          intakeConfig={tenantConfig.intake}
          initialProjects={activeProjects}
          waitingBody={i18n.language === 'es' ? t('submit.waitingBody') : tenantConfig.ui.post_submission_waiting_body}
          needsInfoBody={i18n.language === 'es' ? t('submit.needsInfoBody') : tenantConfig.ui.post_submission_needs_info_body}
          completeBody={i18n.language === 'es' ? t('submit.completeBody') : tenantConfig.ui.post_submission_complete_body}
          labels={{
            project: t('submit.project'),
            projectHelp: t('submit.projectHelp'),
            noProjects: t('submit.noProjects'),
            selectProject: t('submit.selectProject'),
            projectRequired: t('submit.projectRequired'),
            department: t('submit.department'),
            selectDepartment: t('submit.selectDepartment'),
            departmentRequired: t('submit.departmentRequired'),
            dateOfOccurrence: t('submit.dateOfOccurrence'),
            dateFuture: t('submit.dateFuture'),
            dateRequired: t('submit.dateRequired'),
            issueCategory: t('submit.issueCategory'),
            selectCategory: t('submit.selectCategory'),
            categoryRequired: t('submit.categoryRequired'),
            affectedSystem: t('submit.affectedSystem'),
            selectSystem: t('submit.selectSystem'),
            systemRequired: t('submit.systemRequired'),
            priority: t('submit.priority'),
            selectPriority: t('submit.selectPriority'),
            priorityRequired: t('submit.priorityRequired'),
            actionRequested: t('submit.actionRequested'),
            selectAction: t('submit.selectAction'),
            actionRequired: t('submit.actionRequired'),
            description: t('submit.description'),
            descriptionPlaceholder: t('submit.descriptionPlaceholder'),
            descriptionRequired: t('submit.descriptionRequired'),
            successCriteria: t('submit.successCriteria'),
            successCriteriaPlaceholder: t('submit.successCriteriaPlaceholder'),
            successCriteriaRequired: t('submit.successCriteriaRequired'),
            charactersOver: t('submit.charactersOver'),
            charactersRemaining: t('submit.charactersRemaining'),
            submitIssue: t('submit.submitIssue'),
            submitting: t('submit.submitting'),
            error: t('submit.error'),
            ticketSubmitted: t('submit.ticketSubmitted'),
            ticketInQueue: t('submit.ticketInQueue'),
            evaluating: t('submit.evaluating'),
            moreDetails: t('submit.moreDetails'),
            answerPlaceholder: t('submit.answerPlaceholder'),
            submitAdditional: t('submit.submitAdditional'),
            viewTicket: t('submit.viewTicket'),
          }}
        />
      </div>
    </main>
  )
}
