import { useTranslation } from "react-i18next";
import { toast } from "sonner";
import { downloadInvoicePDF } from "@/lib/pdf/invoice-generator.ts";
import { downloadTransportReportPDF } from "@/lib/pdf/transport-report-generator.ts";
import type { Doc } from "@/convex/_generated/dataModel.d.ts";

interface InvoiceExportData {
  invoice: Doc<"invoices">;
  client: Doc<"users">;
  transporter: Doc<"users">;
  request: Doc<"transportRequests">;
}

interface TransportReportExportData {
  request: Doc<"transportRequests">;
  client: Doc<"users">;
  transporter?: Doc<"users">;
  tracking?: Array<Doc<"tracking">>;
  documents?: Array<Doc<"documents">>;
}

export function usePdfExport() {
  const { t, i18n } = useTranslation(["dashboard", "common"]);

  const exportInvoice = async (data: InvoiceExportData) => {
    try {
      toast.loading(t("dashboard:export.generating_pdf"));
      await new Promise((resolve) => setTimeout(resolve, 500)); // Small delay for UX
      downloadInvoicePDF(data, i18n.language);
      toast.dismiss();
      toast.success(t("common:success"), {
        description: t("dashboard:export.invoice_downloaded"),
      });
    } catch (error) {
      toast.dismiss();
      toast.error(t("common:error"), {
        description: t("common:error_occurred"),
      });
      console.error("Error exporting invoice:", error);
    }
  };

  const exportTransportReport = async (data: TransportReportExportData) => {
    try {
      toast.loading(t("dashboard:export.generating_pdf"));
      await new Promise((resolve) => setTimeout(resolve, 500)); // Small delay for UX
      downloadTransportReportPDF(data, i18n.language);
      toast.dismiss();
      toast.success(t("common:success"), {
        description: t("dashboard:export.report_downloaded"),
      });
    } catch (error) {
      toast.dismiss();
      toast.error(t("common:error"), {
        description: t("common:error_occurred"),
      });
      console.error("Error exporting transport report:", error);
    }
  };

  return {
    exportInvoice,
    exportTransportReport,
  };
}
