"use client" import * as React from "react" import { useDataTable } from "@/hooks/use-data-table" import { DataTable } from "@/components/data-table/data-table" import { Button } from "@/components/ui/button" import { toast } from "sonner" import { createAvlRfqItbAction, prepareAvlRfqItbInput } from "../avl-itb-rfq-service" import { columns } from "./columns-detail" import type { AvlDetailItem } from "../types" import { BackButton } from "@/components/ui/back-button" import { useSession } from "next-auth/react" interface AvlDetailTableProps { data: AvlDetailItem[] pageCount?: number avlType?: '프로젝트AVL' | '선종별표준AVL' // AVL 타입 projectInfo?: { code?: string pspid?: string OWN_NM?: string kunnrNm?: string } // 프로젝트 정보 businessType?: string // 사업 유형 (예: 조선/해양) } export function AvlDetailTable({ data, pageCount, avlType, projectInfo, businessType, }: AvlDetailTableProps) { // 견적요청 처리 상태 관리 const [isProcessingQuote, setIsProcessingQuote] = React.useState(false) const { data: session } = useSession() // 견적요청 처리 함수 const handleQuoteRequest = React.useCallback(async () => { if (!businessType || !['조선', '해양'].includes(businessType)) { toast.error("공사구분이 올바르지 않습니다. 견적요청 처리 불가.") return } if (data.length === 0) { toast.error("견적요청할 AVL 데이터가 없습니다.") return } setIsProcessingQuote(true) try { // 현재 사용자 세션에서 ID 가져오기 const currentUserId = session?.user?.id ? Number(session.user.id) : undefined // 견적요청 입력 데이터 준비 (전체 데이터를 사용) const quoteInput = await prepareAvlRfqItbInput( data, // 전체 데이터를 사용 businessType as '조선' | '해양', { picUserId: currentUserId, rfqTitle: `${businessType} AVL 견적요청 - ${data[0]?.materialNameCustomerSide || 'AVL 아이템'}${data.length > 1 ? ` 외 ${data.length - 1}건` : ''}` } ) // 견적요청 실행 const result = await createAvlRfqItbAction(quoteInput) if (result.success) { toast.success(`${result.data?.type}가 성공적으로 생성되었습니다. (코드: ${result.data?.rfqCode})`) } else { toast.error(result.error || "견적요청 처리 중 오류가 발생했습니다.") } } catch (error) { console.error('견적요청 처리 오류:', error) toast.error("견적요청 처리 중 오류가 발생했습니다.") } finally { setIsProcessingQuote(false) } }, [businessType, data, session?.user?.id]) // 액션 핸들러 const handleAction = React.useCallback(async (action: string) => { switch (action) { case 'quote-request': await handleQuoteRequest() break case 'vendor-pool': window.open('/evcp/vendor-pool', '_blank') break case 'download': toast.info("데이터를 다운로드 중입니다.") // TODO: 데이터 다운로드 로직 구현 break case 'avl-form': toast.info("AVL 양식을 준비 중입니다.") // TODO: AVL 양식 다운로드 로직 구현 break default: toast.error(`알 수 없는 액션: ${action}`) } }, [handleQuoteRequest]) // 테이블 메타 설정 const tableMeta = React.useMemo(() => ({ onAction: handleAction, }), [handleAction]) // 데이터 테이블 설정 const { table } = useDataTable({ data, columns, pageCount: pageCount ?? 1, initialState: { sorting: [{ id: "no", desc: false }], pagination: { pageIndex: 0, pageSize: 10, }, }, getRowId: (row) => String(row.id), meta: tableMeta, }) return (