"use client"

import { useFormContext, useFieldArray } from "react-hook-form"
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
import { Input } from "@/components/ui/input"
import { Textarea } from "@/components/ui/textarea"
import { Checkbox } from "@/components/ui/checkbox"
import { Button } from "@/components/ui/button"
import { Calendar } from "@/components/ui/calendar"
import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"
import { Badge } from "@/components/ui/badge"
import { Label } from "@/components/ui/label"
import { Separator } from "@/components/ui/separator"
import { ScrollArea } from "@/components/ui/scroll-area"
import { CalendarIcon, Eye, FileText, Download, ExternalLink } from "lucide-react"
import { format } from "date-fns"
import { cn, formatCurrency } from "@/lib/utils"
import { useState, useEffect } from "react"
import { toast } from "sonner"
import { checkPosFileExists, getDownloadUrlByMaterialCode } from "@/lib/pos"
import { PosFileSelectionDialog } from "@/lib/pos/components/pos-file-selection-dialog"
import {
  Dialog,
  DialogContent,
  DialogDescription,
  DialogFooter,
  DialogHeader,
  DialogTitle,
} from "@/components/ui/dialog"

interface QuotationItemsTableProps {
  prItems: any[]
}

export default function QuotationItemsTable({ prItems }: QuotationItemsTableProps) {
  const { control, register, setValue, watch } = useFormContext()
  const { fields } = useFieldArray({
    control,
    name: "quotationItems"
  })
  
  const [selectedItem, setSelectedItem] = useState<any>(null)
  const [showDetail, setShowDetail] = useState(false)
  const [showBulkDateDialog, setShowBulkDateDialog] = useState(false)
  const [bulkDeliveryDate, setBulkDeliveryDate] = useState<Date | undefined>(undefined)
  
  // POS 파일 관련 상태
  const [posDialogOpen, setPosDialogOpen] = useState(false)
  const [selectedMaterialCode, setSelectedMaterialCode] = useState<string>("")
  const [posFiles, setPosFiles] = useState<Array<{
    fileName: string
    dcmtmId: string
    projNo: string
    posNo: string
    posRevNo: string
    fileSer: string
  }>>([])
  const [loadingPosFiles, setLoadingPosFiles] = useState(false)
  const [downloadingFileIndex, setDownloadingFileIndex] = useState<number | null>(null)

  const currency = watch("vendorCurrency") || "USD"
  const quotationItems = watch("quotationItems")

  console.log(prItems,"prItems")
  
  // PR 아이템 정보를 quotationItems에 초기화
  useEffect(() => {
    if (prItems && prItems.length > 0) {
      prItems.forEach((prItem, index) => {
        // PR 아이템 정보를 quotationItem에 포함
        setValue(`quotationItems.${index}.prNo`, prItem.prNo)
        setValue(`quotationItems.${index}.materialCode`, prItem.materialCode)
        setValue(`quotationItems.${index}.materialDescription`, prItem.materialDescription)
        setValue(`quotationItems.${index}.quantity`, prItem.quantity)
        setValue(`quotationItems.${index}.uom`, prItem.uom)
        setValue(`quotationItems.${index}.rfqPrItemId`, prItem.id)
        
        // currency는 vendorCurrency를 따름
        setValue(`quotationItems.${index}.currency`, currency)
      })
    }
  }, [prItems, setValue, currency])
  
  // 단가 * 수량 계산
  const calculateTotal = (index: number) => {
    const item = quotationItems[index]
    const prItem = prItems[index]
    if (item && prItem) {
      const total = (item.unitPrice || 0) * (prItem.quantity || 0)
      setValue(`quotationItems.${index}.totalPrice`, total)
      
      // PR 아이템 정보도 함께 업데이트 (값이 변경되었을 수 있음)
      setValue(`quotationItems.${index}.prNo`, prItem.prNo)
      setValue(`quotationItems.${index}.materialCode`, prItem.materialCode)
      setValue(`quotationItems.${index}.materialDescription`, prItem.materialDescription)
      setValue(`quotationItems.${index}.quantity`, prItem.quantity)
      setValue(`quotationItems.${index}.uom`, prItem.uom)
    }
  }

  // 일괄 납기일 적용
  const applyBulkDeliveryDate = () => {
    if (bulkDeliveryDate && fields.length > 0) {
      fields.forEach((_, index) => {
        setValue(`quotationItems.${index}.vendorDeliveryDate`, bulkDeliveryDate)
      })
      setShowBulkDateDialog(false)
      setBulkDeliveryDate(undefined)
    }
  }

  // 납기일 초기화
  const clearAllDeliveryDates = () => {
    fields.forEach((_, index) => {
      setValue(`quotationItems.${index}.vendorDeliveryDate`, undefined)
    })
  }
  
  // 사양서 링크 열기
  const handleOpenSpec = (specUrl: string) => {
    window.open(specUrl, '_blank', 'noopener,noreferrer')
  }

  // POS 파일 목록 조회 및 다이얼로그 열기
  const handleOpenPosDialog = async (materialCode: string) => {
    if (!materialCode) {
      toast.error("자재코드가 없습니다")
      return
    }

    setLoadingPosFiles(true)
    setSelectedMaterialCode(materialCode)

    try {
      toast.loading(`POS 파일 목록 조회 중... (${materialCode})`, { id: `pos-check-${materialCode}` })
      
      const result = await checkPosFileExists(materialCode)
      
      if (result.exists && result.files && result.files.length > 0) {
        const detailResult = await getDownloadUrlByMaterialCode(materialCode)
        
        if (detailResult.success && detailResult.availableFiles) {
          setPosFiles(detailResult.availableFiles)
          setPosDialogOpen(true)
          toast.success(`${result.fileCount}개의 POS 파일을 찾았습니다`, { id: `pos-check-${materialCode}` })
        } else {
          toast.error('POS 파일 정보를 가져올 수 없습니다', { id: `pos-check-${materialCode}` })
        }
      } else {
        toast.error(result.error || 'POS 파일을 찾을 수 없습니다', { id: `pos-check-${materialCode}` })
      }
    } catch (error) {
      console.error("POS 파일 조회 오류:", error)
      toast.error("POS 파일 조회에 실패했습니다", { id: `pos-check-${materialCode}` })
    } finally {
      setLoadingPosFiles(false)
    }
  }

  // POS 파일 다운로드 실행
  const handleDownloadPosFile = async (fileIndex: number, fileName: string) => {
    if (!selectedMaterialCode) return

    setDownloadingFileIndex(fileIndex)

    try {
      toast.loading(`POS 파일 다운로드 준비 중...`, { id: `download-${fileIndex}` })
      
      const downloadUrl = `/api/pos/download-on-demand?materialCode=${encodeURIComponent(selectedMaterialCode)}&fileIndex=${fileIndex}`
      
      toast.success(`POS 파일 다운로드 시작: ${fileName}`, { id: `download-${fileIndex}` })
      window.open(downloadUrl, '_blank', 'noopener,noreferrer')
      
      setTimeout(() => {
        setDownloadingFileIndex(null)
      }, 1000)
    } catch (error) {
      console.error("POS 파일 다운로드 오류:", error)
      toast.error("POS 파일 다운로드에 실패했습니다", { id: `download-${fileIndex}` })
      setDownloadingFileIndex(null)
    }
  }

  // POS 다이얼로그 닫기
  const handleClosePosDialog = () => {
    setPosDialogOpen(false)
    setSelectedMaterialCode("")
    setPosFiles([])
    setDownloadingFileIndex(null)
  }
  
  const totalAmount = quotationItems?.reduce(
    (sum: number, item: any) => sum + (item.totalPrice || 0), 0
  ) || 0
  
  // 상세 정보 다이얼로그
  const ItemDetailDialog = ({ item, prItem, index }: any) => {
    const [localDeviationReason, setLocalDeviationReason] = useState("")
    const [localItemRemark, setLocalItemRemark] = useState("")
    const [localTechnicalCompliance, setLocalTechnicalCompliance] = useState(false)
    const [localAlternativeProposal, setLocalAlternativeProposal] = useState("")

    // 다이얼로그가 열릴 때 기존 값으로 초기화
    useEffect(() => {
      if (item) {
        setLocalDeviationReason(item.deviationReason || "")
        setLocalItemRemark(item.itemRemark || "")
        setLocalTechnicalCompliance(item.technicalCompliance || false)
        setLocalAlternativeProposal(item.alternativeProposal || "")
      }
    }, [item])

    // 저장 버튼 클릭 핸들러
    const handleSaveDetail = () => {
      setValue(`quotationItems.${index}.deviationReason`, localDeviationReason)
      setValue(`quotationItems.${index}.itemRemark`, localItemRemark)
      setValue(`quotationItems.${index}.technicalCompliance`, localTechnicalCompliance)
      setValue(`quotationItems.${index}.alternativeProposal`, localAlternativeProposal)
      setShowDetail(false)
    }

    // 취소 버튼 클릭 핸들러
    const handleCancelDetail = () => {
      setShowDetail(false)
    }

    return (
      <Dialog open={showDetail} onOpenChange={(open) => !open && setShowDetail(false)}>
      <DialogContent className="max-w-3xl max-h-[80vh] overflow-y-auto">
        <DialogHeader>
          <DialogTitle>견적 상세 정보</DialogTitle>
          <DialogDescription>
            {prItem.materialCode} - {prItem.materialDescription}
          </DialogDescription>
        </DialogHeader>
        
        <div className="space-y-4">
          {/* PR 아이템 정보 */}
          <Card>
            <CardHeader className="pb-3">
              <CardTitle className="text-base">PR 아이템 정보</CardTitle>
            </CardHeader>
            <CardContent className="grid grid-cols-2 gap-4">
              <div>
                <Label className="text-xs text-muted-foreground">PR 번호</Label>
                <p className="font-medium">{prItem.prNo}</p>
              </div>
              <div>
                <Label className="text-xs text-muted-foreground">자재 코드</Label>
                <p className="font-medium">{prItem.materialCode}</p>
              </div>
              <div>
                <Label className="text-xs text-muted-foreground">수량</Label>
                <p className="font-medium">{prItem.quantity} {prItem.uom}</p>
              </div>
              <div>
                <Label className="text-xs text-muted-foreground">요청 납기일</Label>
                <p className="font-medium">
                  {prItem.deliveryDate ? format(new Date(prItem.deliveryDate), "yyyy-MM-dd") : '-'}
                </p>
              </div>
              {prItem.specNo && (
                <div>
                  <Label className="text-xs text-muted-foreground">스펙 번호</Label>
                  <p className="font-medium">{prItem.specNo}</p>
                </div>
              )}
              {prItem.trackingNo && (
                <div>
                  <Label className="text-xs text-muted-foreground">추적 번호</Label>
                  <p className="font-medium">{prItem.trackingNo}</p>
                </div>
              )}
            </CardContent>
          </Card>
          
          {/* 제조사 정보 */}
          {/* <Card>
            <CardHeader className="pb-3">
              <CardTitle className="text-base">제조사 정보</CardTitle>
            </CardHeader>
            <CardContent className="space-y-3">
              <div className="grid grid-cols-2 gap-4">
                <div className="space-y-2">
                  <Label htmlFor={`manufacturer-${index}`}>제조사</Label>
                  <Input
                    id={`manufacturer-${index}`}
                    {...register(`quotationItems.${index}.manufacturer`)}
                    placeholder="제조사 입력"
                  />
                </div>
                <div className="space-y-2">
                  <Label htmlFor={`manufacturerCountry-${index}`}>제조국</Label>
                  <Input
                    id={`manufacturerCountry-${index}`}
                    {...register(`quotationItems.${index}.manufacturerCountry`)}
                    placeholder="제조국 입력"
                  />
                </div>
              </div>
              <div className="space-y-2">
                <Label htmlFor={`modelNo-${index}`}>모델 번호</Label>
                <Input
                  id={`modelNo-${index}`}
                  {...register(`quotationItems.${index}.modelNo`)}
                  placeholder="모델 번호 입력"
                />
              </div>
            </CardContent>
          </Card> */}
          
          {/* 기술 준수 및 대안 */}
          <Card>
            <CardHeader className="pb-3">
              <CardTitle className="text-base">기술 사양</CardTitle>
            </CardHeader>
            <CardContent className="space-y-3">
              <div className="flex items-center space-x-2">
                <Checkbox
                  id={`technicalCompliance-${index}`}
                  checked={localTechnicalCompliance}
                  onCheckedChange={(checked) => setLocalTechnicalCompliance(checked === true)}
                />
                <Label htmlFor={`technicalCompliance-${index}`}>
                  기술 사양 준수
                </Label>
              </div>
              
              {!localTechnicalCompliance && (
                <div className="space-y-2">
                  <Label htmlFor={`alternativeProposal-${index}`}>
                    대안 제안 <span className="text-red-500">*</span>
                  </Label>
                  <Textarea
                    id={`alternativeProposal-${index}`}
                    value={localAlternativeProposal}
                    onChange={(e) => setLocalAlternativeProposal(e.target.value)}
                    placeholder="기술 사양을 준수하지 않는 경우 대안을 제시해주세요"
                    className="min-h-[100px]"
                  />
                </div>
              )}
              
              <div className="space-y-2">
                <Label htmlFor={`deviationReason-${index}`}>편차 사유</Label>
                <Textarea
                  id={`deviationReason-${index}`}
                  value={localDeviationReason}
                  onChange={(e) => setLocalDeviationReason(e.target.value)}
                  placeholder="요구사항과 다른 부분이 있는 경우 사유를 입력하세요"
                  className="min-h-[80px]"
                />
              </div>
            </CardContent>
          </Card>
          
          {/* 할인 정보 */}
          {/* <Card>
            <CardHeader className="pb-3">
              <CardTitle className="text-base">할인 정보</CardTitle>
            </CardHeader>
            <CardContent className="space-y-3">
              <div className="grid grid-cols-2 gap-4">
                <div className="space-y-2">
                  <Label htmlFor={`discountRate-${index}`}>할인율 (%)</Label>
                  <Input
                    id={`discountRate-${index}`}
                    type="number"
                    step="0.01"
                    {...register(`quotationItems.${index}.discountRate`, { valueAsNumber: true })}
                    onChange={(e) => {
                      setValue(`quotationItems.${index}.discountRate`, parseFloat(e.target.value))
                      applyDiscount(index)
                    }}
                    placeholder="0.00"
                  />
                </div>
                <div className="space-y-2">
                  <Label>할인 금액</Label>
                  <div className="h-10 px-3 py-2 border rounded-md bg-muted">
                    {formatCurrency(
                      (watch(`quotationItems.${index}.unitPrice`) || 0) * 
                      (prItem.quantity || 0) * 
                      ((watch(`quotationItems.${index}.discountRate`) || 0) / 100),
                      currency
                    )}
                  </div>
                </div>
              </div>
            </CardContent>
          </Card> */}
          
          {/* 비고 */}
          <Card>
            <CardHeader className="pb-3">
              <CardTitle className="text-base">비고</CardTitle>
            </CardHeader>
            <CardContent>
              <Textarea
                value={localItemRemark}
                onChange={(e) => setLocalItemRemark(e.target.value)}
                placeholder="아이템별 비고사항을 입력하세요"
                className="min-h-[100px]"
              />
            </CardContent>
          </Card>
        </div>

        <DialogFooter>
          <Button
            type="button"
            variant="outline"
            onClick={handleCancelDetail}
          >
            취소
          </Button>
          <Button
            type="button"
            onClick={handleSaveDetail}
          >
            확인
          </Button>
        </DialogFooter>
      </DialogContent>
    </Dialog>
  )
}
  
  return (
    <Card>
      <CardHeader>
        <div className="flex items-center justify-between">
          <div>
            <CardTitle>견적 품목</CardTitle>
            <CardDescription>
              각 PR 아이템에 대한 견적 단가와 정보를 입력하세요
            </CardDescription>
          </div>
          <div className="flex items-center gap-2">
            <div className="flex gap-2">
              <Button
                type="button"
                variant="outline"
                size="sm"
                onClick={() => setShowBulkDateDialog(true)}
              >
                <CalendarIcon className="h-4 w-4 mr-1" />
                전체 납기일 설정
              </Button>
              <Button
                type="button"
                variant="outline"
                size="sm"
                onClick={clearAllDeliveryDates}
              >
                납기일 초기화
              </Button>
            </div>
            <div className="text-right">
              <p className="text-sm text-muted-foreground">총 견적금액</p>
              <p className="text-2xl font-bold text-primary">
                {formatCurrency(totalAmount, currency)}
              </p>
            </div>
          </div>
        </div>
      </CardHeader>
      <CardContent>
        <ScrollArea className="h-[600px]">
          <div className="overflow-x-auto">
            <Table>
              <TableHeader>
                <TableRow>
                  <TableHead className="w-[60px]">No</TableHead>
                  <TableHead className="w-[100px]">PR No</TableHead>
                  <TableHead className="w-[80px]">PR 아이템</TableHead>
                  <TableHead className="min-w-[150px]">자재코드</TableHead>
                  <TableHead className="min-w-[200px]">자재명</TableHead>
                  <TableHead className="text-right w-[80px]">수량</TableHead>
                  <TableHead className="w-[60px]">단위</TableHead>
                  <TableHead className="text-right w-[80px]">중량</TableHead>
                  <TableHead className="w-[60px]">중량단위</TableHead>
                  <TableHead className="w-[150px]">단가</TableHead>
                  <TableHead className="text-right w-[150px]">총액</TableHead>
                  <TableHead className="w-[150px]">PR납기 요청일</TableHead>
                  <TableHead className="w-[180px]">사양/POS</TableHead>
                  <TableHead className="w-[120px]">프로젝트</TableHead>
                  <TableHead className="w-[80px]">상세</TableHead>
                </TableRow>
              </TableHeader>
              <TableBody>
                {fields.map((field, index) => {
                  const prItem = prItems[index]
                  const quotationItem = quotationItems[index]
                  const isMajor = prItem?.majorYn
                  
                  return (
                    <TableRow key={field.id} className={isMajor ? "bg-blue-50 border-l-4 border-l-blue-500" : ""}>
                      <TableCell>
                        <div className="flex flex-col items-center gap-1">
                          <span className="text-xs font-mono">#{index + 1}</span>
                          {isMajor && (
                            <Badge variant="default" className="text-xs px-1 py-0">
                              주요
                            </Badge>
                          )}
                        </div>
                      </TableCell>
                      <TableCell className="font-mono text-xs">
                        {prItem?.prNo || "-"}
                      </TableCell>
                      <TableCell className="font-mono text-xs">
                        {prItem?.prItem || prItem?.rfqItem || "-"}
                      </TableCell>
                      <TableCell>
                        <div className="flex flex-col">
                          <span className="font-mono text-sm font-medium">{prItem?.materialCode || "-"}</span>
                          {prItem?.acc && (
                            <span className="text-xs text-muted-foreground font-mono">
                              ACC: {prItem.acc}
                            </span>
                          )}
                        </div>
                      </TableCell>
                      <TableCell>
                        <div className="flex flex-col max-w-[200px]">
                          <p className="truncate text-sm font-medium" title={prItem?.materialDescription}>
                            {prItem?.materialDescription || "-"}
                          </p>
                          {prItem?.materialCategory && (
                            <span className="text-xs text-muted-foreground">
                              {prItem.materialCategory}
                            </span>
                          )}
                          {prItem?.size && (
                            <span className="text-xs text-muted-foreground">
                              크기: {prItem.size}
                            </span>
                          )}
                        </div>
                      </TableCell>
                      <TableCell className="text-right">
                        <span className="text-sm font-medium">
                          {prItem?.quantity ? prItem.quantity.toLocaleString() : "-"}
                        </span>
                      </TableCell>
                      <TableCell>
                        <span className="text-sm text-muted-foreground">
                          {prItem?.uom || "-"}
                        </span>
                      </TableCell>
                      <TableCell className="text-right">
                        <span className="text-sm font-medium">
                          {prItem?.grossWeight ? prItem.grossWeight.toLocaleString() : "-"}
                        </span>
                      </TableCell>
                      <TableCell>
                        <span className="text-sm text-muted-foreground">
                          {prItem?.gwUom || "-"}
                        </span>
                      </TableCell>
                      <TableCell>
                        <div className="flex items-center gap-1">
                          <Input
                            type="number"
                            min="0"
                            step="1"
                            {...register(`quotationItems.${index}.unitPrice`, { valueAsNumber: true })}
                            onChange={(e) => {
                              const value = Math.max(0, Math.floor(parseFloat(e.target.value) || 0))
                              setValue(`quotationItems.${index}.unitPrice`, value)
                              calculateTotal(index)
                            }}
                            className="w-[120px]"
                            placeholder="0"
                          />
                          <span className="text-xs text-muted-foreground">
                            {currency}
                          </span>
                        </div>
                      </TableCell>
                      <TableCell className="text-right font-medium">
                        {formatCurrency(quotationItem?.totalPrice || 0, currency)}
                      </TableCell>
                      <TableCell>
                        <Popover>
                          <PopoverTrigger asChild>
                            <Button
                              variant="outline"
                              size="sm"
                              className={cn(
                                "w-[130px] justify-start text-left font-normal",
                                !quotationItem?.vendorDeliveryDate && "text-muted-foreground"
                              )}
                            >
                              <CalendarIcon className="mr-2 h-3 w-3" />
                              {quotationItem?.vendorDeliveryDate 
                                ? format(quotationItem.vendorDeliveryDate, "yyyy-MM-dd") 
                                : "선택"}
                            </Button>
                          </PopoverTrigger>
                          <PopoverContent className="w-auto p-0" align="start">
                            <Calendar
                              mode="single"
                              selected={quotationItem?.vendorDeliveryDate}
                              onSelect={(date) => setValue(`quotationItems.${index}.vendorDeliveryDate`, date)}
                              initialFocus
                            />
                          </PopoverContent>
                        </Popover>
                        {prItem?.deliveryDate && quotationItem?.vendorDeliveryDate && 
                         new Date(quotationItem.vendorDeliveryDate) > new Date(prItem.deliveryDate) && (
                          <div className="mt-1">
                            <Badge variant="destructive" className="text-xs">
                              지연
                            </Badge>
                          </div>
                        )}
                      </TableCell>
                      <TableCell>
                        <div className="flex flex-col gap-1">
                          {/* 사양서 정보 */}
                          {(prItem?.specNo || prItem?.specUrl) && (
                            <div className="flex items-center gap-1">
                              {prItem.specNo && (
                                <span className="text-xs font-mono">{prItem.specNo}</span>
                              )}
                              {prItem.specUrl && (
                                <Button
                                  type="button"
                                  variant="ghost"
                                  size="sm"
                                  className="h-5 w-5 p-0"
                                  onClick={() => handleOpenSpec(prItem.specUrl!)}
                                  title="사양서 열기"
                                >
                                  <ExternalLink className="h-3 w-3" />
                                </Button>
                              )}
                            </div>
                          )}
                          
                          {/* POS 파일 다운로드 */}
                          {prItem?.materialCode && (
                            <div className="flex items-center gap-1">
                              <FileText className="h-3 w-3 text-green-500" />
                              <Button
                                type="button"
                                variant="ghost"
                                size="sm"
                                className="h-5 p-1 text-xs text-green-600 hover:text-green-800"
                                onClick={() => handleOpenPosDialog(prItem.materialCode!)}
                                disabled={loadingPosFiles && selectedMaterialCode === prItem.materialCode}
                                title={`POS 파일 다운로드 (자재코드: ${prItem.materialCode})`}
                              >
                                <Download className="h-3 w-3 mr-1" />
                                {loadingPosFiles && selectedMaterialCode === prItem.materialCode ? '조회중...' : 'POS'}
                              </Button>
                            </div>
                          )}
                          
                          {/* 트래킹 번호 */}
                          {prItem?.trackingNo && (
                            <div className="text-xs text-muted-foreground">
                              TRK: {prItem.trackingNo}
                            </div>
                          )}
                        </div>
                      </TableCell>
                      <TableCell>
                        <div className="text-xs">
                          {[
                            prItem?.projectDef && `${prItem.projectDef}`,
                            prItem?.projectSc && `SC: ${prItem.projectSc}`,
                            prItem?.projectKl && `KL: ${prItem.projectKl}`,
                            prItem?.projectLc && `LC: ${prItem.projectLc}`,
                            prItem?.projectDl && `DL: ${prItem.projectDl}`
                          ].filter(Boolean).join(" | ") || "-"}
                        </div>
                      </TableCell>
                      <TableCell>
                        <Button
                          type="button"
                          variant="ghost"
                          size="sm"
                          onClick={() => {
                            setSelectedItem({ item: quotationItem, prItem, index })
                            setShowDetail(true)
                          }}
                        >
                          <Eye className="h-4 w-4" />
                        </Button>
                      </TableCell>
                    </TableRow>
                  )
                })}
              </TableBody>
            </Table>
          </div>
        </ScrollArea>
        
        {/* 총액 요약 */}
        <div className="mt-4 flex justify-end">
          <Card className="w-[400px]">
            <CardContent className="pt-4">
              <div className="space-y-2">
                <div className="flex justify-between text-sm">
                  <span className="text-muted-foreground">소계</span>
                  <span>{formatCurrency(totalAmount, currency)}</span>
                </div>
                <div className="flex justify-between text-sm">
                  <span className="text-muted-foreground">통화</span>
                  <span>{currency}</span>
                </div>
                <div className="border-t pt-2">
                  <div className="flex justify-between">
                    <span className="font-semibold">총 견적금액</span>
                    <span className="text-xl font-bold text-primary">
                      {formatCurrency(totalAmount, currency)}
                    </span>
                  </div>
                </div>
              </div>
            </CardContent>
          </Card>
        </div>
      </CardContent>
      
      {/* 상세 다이얼로그 */}
      {selectedItem && (
        <ItemDetailDialog
          item={selectedItem.item}
          prItem={selectedItem.prItem}
          index={selectedItem.index}
        />
      )}

      {/* 일괄 납기일 설정 다이얼로그 */}
      <Dialog open={showBulkDateDialog} onOpenChange={setShowBulkDateDialog}>
        <DialogContent className="sm:max-w-md">
          <DialogHeader>
            <DialogTitle>전체 납기일 설정</DialogTitle>
            <DialogDescription>
              모든 PR 아이템에 동일한 납기일을 적용합니다.
            </DialogDescription>
          </DialogHeader>

          <div className="space-y-4">
            <div className="space-y-2">
              <Label>납기일 선택</Label>
              <Popover>
                <PopoverTrigger asChild>
                  <Button
                    variant="outline"
                    className={cn(
                      "w-full justify-start text-left font-normal",
                      !bulkDeliveryDate && "text-muted-foreground"
                    )}
                  >
                    <CalendarIcon className="mr-2 h-4 w-4" />
                    {bulkDeliveryDate ? format(bulkDeliveryDate, "yyyy-MM-dd") : "날짜 선택"}
                  </Button>
                </PopoverTrigger>
                <PopoverContent className="w-auto p-0" align="start">
                  <Calendar
                    mode="single"
                    selected={bulkDeliveryDate}
                    onSelect={setBulkDeliveryDate}
                    initialFocus
                  />
                </PopoverContent>
              </Popover>
            </div>

            <div className="bg-muted/50 rounded-lg p-3">
              <p className="text-sm text-muted-foreground">
                선택된 날짜가 <strong>{fields.length}개</strong>의 모든 PR 아이템에 적용됩니다.
                기존에 설정된 납기일은 모두 교체됩니다.
              </p>
            </div>
          </div>

          <DialogFooter>
            <Button
              type="button"
              variant="outline"
              onClick={() => {
                setShowBulkDateDialog(false)
                setBulkDeliveryDate(undefined)
              }}
            >
              취소
            </Button>
            <Button
              type="button"
              onClick={applyBulkDeliveryDate}
              disabled={!bulkDeliveryDate}
            >
              전체 적용
            </Button>
          </DialogFooter>
        </DialogContent>
      </Dialog>
      
      {/* POS 파일 선택 다이얼로그 */}
      <PosFileSelectionDialog
        isOpen={posDialogOpen}
        onClose={handleClosePosDialog}
        materialCode={selectedMaterialCode}
        files={posFiles}
        onDownload={handleDownloadPosFile}
        downloadingIndex={downloadingFileIndex}
      />
    </Card>
  )
}