"use client";

import { useState } from "react";
import { downloadFormPDF, generatePDFDocument, getFormTitle } from "@/src/utils/webPdfGenerator";
import WebPDFPreviewModal from "./WebPDFPreviewModal";
import type { ReactElement } from "react";

interface WebPDFDownloadButtonProps {
  formData: any;
  formType: "home-improvement" | "first-time-buyer" | "tenant-maintenance";
  className?: string;
}

export default function WebPDFDownloadButton({
  formData,
  formType,
  className = "",
}: WebPDFDownloadButtonProps) {
  const [isGeneratingPDF, setIsGeneratingPDF] = useState(false);
  const [showPreview, setShowPreview] = useState(false);
  const [pdfDocument, setPdfDocument] = useState<ReactElement | null>(null);

  const handlePreview = () => {
    const doc = generatePDFDocument(formData, formType);
    setPdfDocument(doc);
    setShowPreview(true);
  };

  const handleDownloadPDF = async () => {
    setIsGeneratingPDF(true);
    const result = await downloadFormPDF(formData, formType);
    
    if (!result.success) {
      alert(result.error);
    }
    
    setIsGeneratingPDF(false);
    setShowPreview(false);
  };

  return (
    <>
      <button
        onClick={handlePreview}
        disabled={isGeneratingPDF}
        className={`flex items-center gap-2 px-4 py-2 bg-teal-600 text-white rounded-md hover:bg-teal-700 transition-colors disabled:opacity-50 disabled:cursor-not-allowed ${className}`}
      >
        <svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
          <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
          <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z" />
        </svg>
        Preview PDF
      </button>

      {pdfDocument && (
        <WebPDFPreviewModal
          isOpen={showPreview}
          onClose={() => setShowPreview(false)}
          onDownload={handleDownloadPDF}
          pdfDocument={pdfDocument}
          title={getFormTitle(formType)}
        />
      )}
    </>
  );
}
