import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import { FileText } from "lucide-react";
import { generateInvoicePDF } from "@/lib/generate-invoice-pdf";

interface OrderInvoiceButtonProps {
  order: {
    id: string;
    customer_name: string;
    customer_email: string;
    customer_phone?: string | null;
    course_id: string;
    start_date: string;
    num_delegates: number;
    price_cents: number;
    discount_code?: string | null;
    discount_cents?: number | null;
    payment_method: string;
    status: string;
    created_at: string;
  };
  courseTitle?: string;
  companyName?: string | null;
  /** Presentation: a compact clickable badge (default — used in table rows) or a
   *  full "Download Invoice" button (used in the order details dialog). */
  variant?: "badge" | "button";
}

const OrderInvoiceButton = ({ order, courseTitle, companyName, variant = "badge" }: OrderInvoiceButtonProps) => {
  const handleDownload = async () => {
    const doc = await generateInvoicePDF({
      orderId: order.id,
      customerName: order.customer_name,
      customerEmail: order.customer_email,
      customerPhone: order.customer_phone,
      companyName: companyName,
      courseTitle: courseTitle || "Course",
      startDate: order.start_date,
      numDelegates: order.num_delegates,
      priceCents: order.price_cents,
      discountCode: order.discount_code,
      discountCents: order.discount_cents,
      paymentMethod: order.payment_method,
      status: order.status,
      createdAt: order.created_at,
    });
    doc.save(`invoice-${order.id.slice(0, 8)}.pdf`);
  };

  if (variant === "button") {
    return (
      <Button variant="outline" size="sm" onClick={handleDownload}>
        <FileText className="w-3.5 h-3.5 mr-1.5" /> Download Invoice
      </Button>
    );
  }

  return (
    <Badge
      variant="outline"
      className="cursor-pointer hover:bg-muted/50 text-xs gap-1"
      onClick={handleDownload}
    >
      <FileText className="h-3 w-3" />
      invoice
    </Badge>
  );
};

export default OrderInvoiceButton;
