"use client"

import { TableColumn } from "@/types/table"
import { Badge } from "@/components/ui/badge"
import { Checkbox } from "@/components/ui/checkbox"
import { format } from "date-fns"

export interface Partner {
  id: string
  name: string
  phone: string
  email: string
  bookingsTillNow: number
  lastBookingDate: string | null
  status: "Active" | "Inactive"
  addedBy: string
  addedOn: string
  isPrimary?: boolean
}

interface GetPartnerColumnsParams {
  selectedRows: string[]
  onSelectRow: (id: string) => void
  onSelectAll: (checked: boolean) => void
}

export function getPartnerColumns({
  selectedRows,
  onSelectRow,
  onSelectAll,
}: GetPartnerColumnsParams): TableColumn[] {
  return [
    {
      header: () => (
        <Checkbox
          checked={selectedRows.length > 0}
          onCheckedChange={onSelectAll}
          aria-label="Select all"
        />
      ),
      accessor: (row: any) => (
        <Checkbox
          checked={selectedRows.includes(row.id)}
          onCheckedChange={() => onSelectRow(row.id)}
          aria-label={`Select ${row.name}`}
          onClick={(e) => e.stopPropagation()}
        />
      ),
      className: "w-12",
    },
    {
      header: "Contact Name",
      accessor: (row: any) => (
        <div className="flex items-center gap-2">
          <span className="font-medium">{row.name}</span>
          {row.isPrimary && (
            <Badge variant="secondary" className="text-xs">
              Primary
            </Badge>
          )}
        </div>
      ),
    },
    {
      header: "Contact",
      accessor: (row: any) => (
        <div className="flex flex-col">
          <span className="font-medium">{row.phone}</span>
          <span className="text-xs text-muted-foreground">{row.email}</span>
        </div>
      ),
    },
    {
      header: "Bookings Till Now",
      accessor: (row: any) => <span>{row.bookingsTillNow}</span>,
      className: "text-center",
    },
    {
      header: "Last Booking Date",
      accessor: (row: any) => (
        <span>
          {row.lastBookingDate
            ? format(new Date(row.lastBookingDate), "dd MMM yyyy")
            : "-"}
        </span>
      ),
    },
    {
      header: "Status",
      accessor: (row: any) => (
        <Badge
          variant={row.status === "Active" ? "default" : "secondary"}
          className={
            row.status === "Active"
              ? "bg-green-100 text-green-800 hover:bg-green-100 dark:bg-green-900 dark:text-green-100"
              : "bg-red-100 text-red-800 hover:bg-red-100 dark:bg-red-900 dark:text-red-100"
          }
        >
          {row.status}
        </Badge>
      ),
    },
    {
      header: "Added By",
      accessor: (row: any) => (
        <div className="flex flex-col">
          <span className="font-medium">{row.addedBy}</span>
          <span className="text-xs text-muted-foreground">
            {format(new Date(row.addedOn), "dd MMM yyyy")}
          </span>
        </div>
      ),
    },
  ]
}
