"use client";

import Swal from "sweetalert2";
import { Button } from "@/components/ui/button";
import { exportToExcel, fileNameWithDate, type ExcelColumn } from "@/lib/excel-export";

interface Props {
  data: Record<string, unknown>[];
  columns: ExcelColumn[];
  // 파일명 (확장자 생략 가능). 비우면 "export".
  // withDate=true(기본)이면 파일명 끝에 _YYYY-MM-DD 자동 부여.
  filename?: string;
  withDate?: boolean;
  sheetName?: string;
  label?: string;
  disabled?: boolean;
  size?: "sm" | "md" | "lg";
  variant?: "primary" | "secondary" | "danger" | "ghost";
  className?: string;
}

// 공통 Excel 다운로드 버튼. 어느 목록 페이지든 data + columns 만 주면 동작.
// 원본 FITO의 Excel Download 버튼 대응.
export function ExcelDownloadButton({
  data,
  columns,
  filename = "export",
  withDate = true,
  sheetName,
  label = "Excel Download",
  disabled,
  size = "sm",
  variant = "secondary",
  className,
}: Props) {
  const handleClick = () => {
    if (!Array.isArray(data) || data.length === 0) {
      Swal.fire("알림", "다운로드할 데이터가 없습니다.", "warning");
      return;
    }
    try {
      const finalName = withDate ? fileNameWithDate(filename) : filename;
      exportToExcel({ data, columns, filename: finalName, sheetName: sheetName ?? filename });
    } catch (e) {
      console.error("Excel export:", e);
      Swal.fire("오류", "엑셀 다운로드 중 오류가 발생했습니다.", "error");
    }
  };

  return (
    <Button size={size} variant={variant} onClick={handleClick} disabled={disabled} className={className}>
      {label}
    </Button>
  );
}
