import { useState, type ReactNode } from 'react';
import { downloadApiFile } from '../api/download';

type Props = {
  apiPath: string;
  filename: string;
  className?: string;
  children: ReactNode;
};

/** Click to save an API file to the browser Downloads folder. */
export default function DownloadButton({ apiPath, filename, className, children }: Props) {
  const [busy, setBusy] = useState(false);

  const handleClick = async (e: React.MouseEvent) => {
    e.preventDefault();
    if (busy) return;
    setBusy(true);
    try {
      await downloadApiFile(apiPath, filename);
    } catch (err) {
      window.alert(err instanceof Error ? err.message : 'Download failed');
    } finally {
      setBusy(false);
    }
  };

  return (
    <button type="button" className={className} onClick={handleClick} disabled={busy}>
      {busy ? 'Downloading…' : children}
    </button>
  );
}
