// simplified-documents-table.tsx
"use client"

import React from "react"
import type {
  DataTableAdvancedFilterField,
  DataTableFilterField,
  DataTableRowAction,
} from "@/types/table"

import { useDataTable } from "@/hooks/use-data-table"
import { getEnhancedDocumentsShip } from "../enhanced-document-service"
import { DataTableAdvancedToolbar } from "@/components/data-table/data-table-advanced-toolbar"
import { toast } from "sonner"

import { Label } from "@/components/ui/label"
import { DataTable } from "@/components/data-table/data-table"
import { SimplifiedDocumentsView } from "@/db/schema"
import { getSimplifiedDocumentColumns } from "./enhanced-doc-table-columns"

interface SimplifiedDocumentsTableProps {
  promises: Promise<{ 
    data: SimplifiedDocumentsView[], 
    pageCount: number, 
    total: number 
  }>
}

export function SimplifiedDocumentsTable({
  promises,
}: SimplifiedDocumentsTableProps) {
  // React.use()로 Promise 결과를 받고, 그 다음에 destructuring
  const result = React.use(promises)
  const { data, pageCount, total } = result

  // 기존 상태들
  const [rowAction, setRowAction] = React.useState<DataTableRowAction<SimplifiedDocumentsView> | null>(null) // ✅ 타입 변경
  const [expandedRows,] = React.useState<Set<string>>(new Set())

  const columns = React.useMemo(
    () => getSimplifiedDocumentColumns({ setRowAction }),
    [setRowAction]
  )

  // ✅ SimplifiedDocumentsView에 맞게 필터 필드 업데이트
  const advancedFilterFields: DataTableAdvancedFilterField<SimplifiedDocumentsView>[] = [
    {
      id: "docNumber",
      label: "문서번호",
      type: "text",
    },
    {
      id: "vendorDocNumber",
      label: "벤더 문서번호", 
      type: "text",
    },
    {
      id: "title",
      label: "문서제목",
      type: "text",
    },
    {
      id: "drawingKind",
      label: "문서종류",
      type: "select",
      options: [
        { label: "B3", value: "B3" },
        { label: "B4", value: "B4" },
        { label: "B5", value: "B5" },
      ],
    },
    {
      id: "projectCode",
      label: "프로젝트 코드",
      type: "text",
    },
    {
      id: "vendorName",
      label: "벤더명",
      type: "text",
    },
    {
      id: "vendorCode",
      label: "벤더 코드",
      type: "text",
    },
    {
      id: "pic",
      label: "담당자",
      type: "text",
    },
    {
      id: "status",
      label: "문서 상태",
      type: "select",
      options: [
        { label: "활성", value: "ACTIVE" },
        { label: "비활성", value: "INACTIVE" },
        { label: "보류", value: "PENDING" },
        { label: "완료", value: "COMPLETED" },
      ],
    },
    {
      id: "firstStageName",
      label: "1차 스테이지",
      type: "text",
    },
    {
      id: "secondStageName",
      label: "2차 스테이지", 
      type: "text",
    },
    {
      id: "firstStagePlanDate",
      label: "1차 계획일",
      type: "date",
    },
    {
      id: "firstStageActualDate",
      label: "1차 실제일",
      type: "date",
    },
    {
      id: "secondStagePlanDate",
      label: "2차 계획일",
      type: "date",
    },
    {
      id: "secondStageActualDate",
      label: "2차 실제일",
      type: "date",
    },
    {
      id: "issuedDate",
      label: "발행일",
      type: "date",
    },
    {
      id: "createdAt",
      label: "생성일",
      type: "date",
    },
    {
      id: "updatedAt",
      label: "수정일",
      type: "date",
    },
  ]

  // ✅ B4 전용 필드들 (조건부로 추가)
  const b4FilterFields: DataTableAdvancedFilterField<SimplifiedDocumentsView>[] = [
    {
      id: "cGbn",
      label: "C 구분",
      type: "text",
    },
    {
      id: "dGbn", 
      label: "D 구분",
      type: "text",
    },
    {
      id: "degreeGbn",
      label: "Degree 구분",
      type: "text", 
    },
    {
      id: "deptGbn",
      label: "Dept 구분",
      type: "text",
    },
    {
      id: "jGbn",
      label: "J 구분", 
      type: "text",
    },
    {
      id: "sGbn",
      label: "S 구분",
      type: "text",
    },
  ]

  // B4 문서가 있는지 확인하여 B4 전용 필드 추가
  const hasB4Documents = data.some(doc => doc.drawingKind === 'B4')
  const finalFilterFields = hasB4Documents 
    ? [...advancedFilterFields, ...b4FilterFields]
    : advancedFilterFields

  const { table } = useDataTable({
    data: data,
    columns,
    pageCount,
    enablePinning: true,
    enableAdvancedFilter: true,
    initialState: {
      sorting: [{ id: "createdAt", desc: true }],
      columnPinning: { right: ["actions"] },
    },
    getRowId: (originalRow) => String(originalRow.documentId),
    shallow: false,
    clearOnDefault: true,
    columnResizeMode: "onEnd",
  })

  // ✅ 행 액션 처리 (필요에 따라 구현)
  React.useEffect(() => {
    if (rowAction?.type === "view") {
      toast.info(`문서 조회: ${rowAction.row.docNumber}`)
      setRowAction(null)
    } else if (rowAction?.type === "edit") {
      toast.info(`문서 편집: ${rowAction.row.docNumber}`)
      setRowAction(null)
    } else if (rowAction?.type === "delete") {
      toast.error(`문서 삭제: ${rowAction.row.docNumber}`)
      setRowAction(null)
    }
  }, [rowAction])

  return (
    <div className="w-full" style={{maxWidth:'100%'}}>
    <DataTable table={table}>
      <DataTableAdvancedToolbar
        table={table}
        filterFields={finalFilterFields}
        shallow={false}
      >
        {/* ✅ 추가 툴바 컨텐츠 (필요시) */}
        <div className="flex items-center gap-2">
          <Label className="text-sm font-medium">
            총 {total}개 문서
          </Label>
        </div>
      </DataTableAdvancedToolbar>
    </DataTable>
    </div>
  )
}
