import { Button, message } from 'antd';
import { DownloadOutlined } from '@ant-design/icons';
import client from '../../../api/client';

interface Props {
  fetchUrl: string;
  params?: Record<string, string>;
  filename?: string;
  label?: string;
}

export function ExportButton({
  fetchUrl,
  params,
  filename,
  label = '导出',
}: Props) {
  const handleExport = async () => {
    try {
      const query = params
        ? '?' + new URLSearchParams(params).toString()
        : '';
      const resp = await client.get(fetchUrl + query, {
        responseType: 'blob',
      });
      const blob = resp.data instanceof Blob
        ? resp.data
        : new Blob([resp.data]);
      const url = URL.createObjectURL(blob);
      const a = document.createElement('a');
      a.href = url;
      a.download = filename ?? `export_${Date.now()}.csv`;
      a.click();
      URL.revokeObjectURL(url);
      message.success('导出成功');
    } catch {
      message.error('导出失败');
    }
  };

  return (
    <Button icon={<DownloadOutlined />} onClick={handleExport}>
      {label}
    </Button>
  );
}
