"use client";

import React from "react";
import { ColumnDef } from "@tanstack/react-table";
import { SupplierDTOSchema } from "@/lib/db/schemas/api";
import { z } from "zod";
import { Button } from "@/components/ui/button";
import { Trash, Edit, MoreHorizontal } from "lucide-react";
import { deleteSupplier } from "@/actions/settings";
import { toast } from "sonner";
import { formatDate } from "@/lib/format";
import {
  DropdownMenu,
  DropdownMenuContent,
  DropdownMenuItem,
  DropdownMenuLabel,
  DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";

export type SuppliersOverview = z.infer<typeof SupplierDTOSchema>;

export const getColumns = (
  handleRowClick: (supplier: SuppliersOverview) => void,
  router: any,
  startTransition: (scope: () => void) => void
): ColumnDef<SuppliersOverview>[] => [
  {
    accessorKey: "id",
    header: "ID",
    cell: ({ row }) => (
      <span className="text-xs text-muted-foreground font-mono">
        #{row.getValue("id")}
      </span>
    ),
  },
  {
    accessorKey: "companyName",
    header: "Firmenname",
  },
  {
    accessorKey: "email",
    header: "Email",
  },
  {
    accessorKey: "phoneNumber",
    header: "Telefonnummer",
  },
  {
    accessorKey: "website",
    header: "Webseite",
    cell: ({ row }) => {
      const website = row.getValue("website") as string | null;
      if (!website) return "-";
      return <a href={website} target="_blank" rel="noopener noreferrer" className="text-blue-500 hover:underline">{website}</a>;
    }
  },
  {
    accessorKey: "createdAt",
    header: "Erstellt am",
    cell: ({ row }) => {
      return formatDate(row.getValue("createdAt") as string);
    },
  },
  {
    id: "actions",
    cell: ({ row }) => {
      const supplier = row.original;

      const onDelete = async () => {
        const displayName = supplier!.companyName || "Lieferant";
        if (confirm(`Möchten Sie den Lieferanten "${displayName}" wirklich löschen?`)) {
          const result = await deleteSupplier({ id: supplier!.id });
          if (!result.success) {
            toast.error(result.error);
          } else {
            toast.success(result.message || "Lieferant erfolgreich gelöscht.");
            startTransition(() => {
              router.refresh();
            });
          }
        }
      };

      return (
        <DropdownMenu>
          <DropdownMenuTrigger asChild>
            <Button variant="ghost" className="h-8 w-8 p-0">
              <span className="sr-only">Menü öffnen</span>
              <MoreHorizontal className="h-4 w-4" />
            </Button>
          </DropdownMenuTrigger>
          <DropdownMenuContent align="end">
            <DropdownMenuLabel>Aktionen</DropdownMenuLabel>
            <DropdownMenuItem onClick={() => handleRowClick(supplier)}>
              <Edit className="mr-2 h-4 w-4" />
              Bearbeiten
            </DropdownMenuItem>
            <DropdownMenuItem onClick={onDelete} className="text-destructive">
              <Trash className="mr-2 h-4 w-4" />
              Löschen
            </DropdownMenuItem>
          </DropdownMenuContent>
        </DropdownMenu>
      );
    },
  },
];
