"use client"

import { Compass } from "lucide-react"

import { ListPageCard } from "@/app/dashboard/_components"
import type { ServerPaginationMeta } from "@/app/dashboard/_components/data-table"
import {
  DeepdexDocumentsTable,
  useDeepdexDocumentsTable,
} from "@/components/deepdex/components/deepdex-documents-table"
import { DeepdexDocumentsToolbar } from "@/components/deepdex/components/deepdex-documents-toolbar"
import { deepdexSettingsDefaults } from "@/components/deepdex/data/deepdex-settings.defaults"
import { useDeepdexList } from "@/components/deepdex/hooks/use-deepdex-list"
import { useDeepdexListFilters } from "@/components/deepdex/hooks/use-deepdex-list-filters"
import type { DeepdexListFilters } from "@/components/deepdex/lib/parse-deepdex-list-query"
import { ErrorBanner } from "@/components/shared/error-banner"
import type { DeepdexDocument, DeepdexSettings } from "@/components/deepdex/types"

type DeepdexViewAllPageProps = {
  initialData?: DeepdexDocument[]
  initialIndexedCount?: number
  initialTotalCount?: number
  initialSettings?: DeepdexSettings
  initialErrorMessage?: string | null
  initialFilters: DeepdexListFilters
  pagination: ServerPaginationMeta
}

export function DeepdexViewAllPage({
  initialData = [],
  initialIndexedCount = 0,
  initialTotalCount = 0,
  initialSettings = deepdexSettingsDefaults,
  initialErrorMessage = null,
  initialFilters,
  pagination,
}: DeepdexViewAllPageProps) {
  const { filters, setFilter, isPending } = useDeepdexListFilters(initialFilters)
  const {
    data,
    indexedCount,
    totalCount,
    pagination: listPagination,
    isLoading,
    isRefreshing,
    refresh,
    removeLocal,
  } = useDeepdexList({
    initialData,
    initialIndexedCount,
    initialPagination: pagination,
  })

  const { table } = useDeepdexDocumentsTable({
    data,
    settings: initialSettings,
    onDelete: removeLocal,
    onRerunTag: () => void refresh(),
    serverPagination: listPagination,
  })

  return (
    <ListPageCard
      icon={Compass}
      title="Deepdex documents"
      description="Files stored for search, visibility, and customer access control."
      breadcrumb={[
        { label: "Deepdex", href: "/dashboard/deepdex/view-all" },
        { label: "View all" },
      ]}
      actions={
        <DeepdexDocumentsToolbar
          table={table}
          isRefreshing={isRefreshing || isPending}
          onRefresh={() => void refresh()}
        />
      }
    >
      <ErrorBanner message={initialErrorMessage} className="mb-4" />
      <DeepdexDocumentsTable
        table={table}
        indexedCount={indexedCount}
        totalCount={totalCount}
        filters={filters}
        onFilterChange={setFilter}
        isLoading={isLoading}
        isPending={isRefreshing || isPending}
      />
    </ListPageCard>
  )
}
