"use client"

import * as React from "react"
import { type RfqDetailView } from "./detail-table/rfq-detail-column"
import { Loader } from "lucide-react"

import { useMediaQuery } from "@/hooks/use-media-query"
import { Button } from "@/components/ui/button"
import {
  Dialog,
  DialogClose,
  DialogContent,
  DialogDescription,
  DialogFooter,
  DialogHeader,
  DialogTitle,
} from "@/components/ui/dialog"
import {
  Drawer,
  DrawerClose,
  DrawerContent,
  DrawerDescription,
  DrawerFooter,
  DrawerHeader,
  DrawerTitle,
} from "@/components/ui/drawer"

interface DeleteVendorsDialogProps
  extends React.ComponentPropsWithoutRef<typeof Dialog> {
  vendors: RfqDetailView[]
  onConfirm: () => void
  isLoading?: boolean
}

export function DeleteVendorsDialog({
  vendors,
  onConfirm,
  isLoading = false,
  ...props
}: DeleteVendorsDialogProps) {
  const isDesktop = useMediaQuery("(min-width: 640px)")

  const vendorNames = vendors.map(v => v.vendorName).filter(Boolean).join(", ")

  if (isDesktop) {
    return (
      <Dialog {...props}>
        <DialogContent>
          <DialogHeader>
            <DialogTitle>벤더 삭제 확인</DialogTitle>
            <DialogDescription>
              정말로 선택한 <span className="font-medium">{vendors.length}개</span>의 벤더를 삭제하시겠습니까?
              <br />
              <br />
              삭제될 벤더: <span className="font-medium">{vendorNames}</span>
              <br />
              <br />
              이 작업은 되돌릴 수 없습니다.
            </DialogDescription>
          </DialogHeader>
          <DialogFooter className="gap-2 sm:space-x-0">
            <DialogClose asChild>
              <Button variant="outline" disabled={isLoading}>취소</Button>
            </DialogClose>
            <Button
              aria-label="선택한 벤더들 삭제"
              variant="destructive"
              onClick={onConfirm}
              disabled={isLoading}
            >
              {isLoading && (
                <Loader
                  className="mr-2 size-4 animate-spin"
                  aria-hidden="true"
                />
              )}
              삭제
            </Button>
          </DialogFooter>
        </DialogContent>
      </Dialog>
    )
  }

  return (
    <Drawer {...props}>
      <DrawerContent>
        <DrawerHeader>
          <DrawerTitle>벤더 삭제 확인</DrawerTitle>
          <DrawerDescription>
            정말로 선택한 <span className="font-medium">{vendors.length}개</span>의 벤더를 삭제하시겠습니까?
            <br />
            <br />
            삭제될 벤더: <span className="font-medium">{vendorNames}</span>
            <br />
            <br />
            이 작업은 되돌릴 수 없습니다.
          </DrawerDescription>
        </DrawerHeader>
        <DrawerFooter className="gap-2 sm:space-x-0">
          <DrawerClose asChild>
            <Button variant="outline" disabled={isLoading}>취소</Button>
          </DrawerClose>
          <Button
            aria-label="선택한 벤더들 삭제"
            variant="destructive"
            onClick={onConfirm}
            disabled={isLoading}
          >
            {isLoading && (
              <Loader className="mr-2 size-4 animate-spin" aria-hidden="true" />
            )}
            삭제
          </Button>
        </DrawerFooter>
      </DrawerContent>
    </Drawer>
  )
} 