import React from 'react'
import moment from 'moment-timezone'

import { ColumnDef } from '@tanstack/react-table'
import { ActionButtons } from './ActionButtons'

import { Payment } from '@/src/interfaces/users/payments'

interface Props {
  onDownloadPaymentReport: (paymentId: string) => void
  onOpenDeleteModal: (paymentId: string) => void
}

export const useColumns = ({
  onDownloadPaymentReport,
  onOpenDeleteModal,
}: Props) =>
  React.useMemo<ColumnDef<Payment>[]>(
    () => [
      { header: 'Código de Pago', accessorKey: 'code' },
      {
        header: 'Fecha',
        accessorKey: 'date',
        cell: ({ row }) =>
          row.original.date && (
            <span className="text-nowrap">
              {moment(row.original.date).format('DD/MM/YYYY HH:mm A')}
            </span>
          ),
      },
      {
        header: 'Estado de Pago',
        accessorKey: 'status.name',
      },
      {
        header: 'Concepto',
        accessorKey: 'concept.name',
        cell: ({ row }) => (
          <span className="text-nowrap">{row.original.concept.name}</span>
        ),
      },
      {
        header: 'Monto Total',
        accessorKey: 'total',
        cell: ({ row }) => `S/ ${row.original.total.toFixed(2)}`,
      },
      {
        header: 'Código del estudiante',
        accessorKey: 'student.code',
        cell: ({ row }) => (
          <span className="text-nowrap">{row.original.student?.code}</span>
        ),
      },
      {
        header: 'Nombre del estudiante',
        accessorKey: 'student.name',
        cell: ({ row }) => (
          <span className="text-nowrap">
            {row.original.student?.name + ' ' + row.original.student?.lastname}
          </span>
        ),
      },
      { header: 'Creado por', accessorKey: 'creatorName' },
      {
        header: 'Acciones',
        cell: ({ row }) => (
          <ActionButtons
            paymentId={row.original.id}
            onDownloadReport={onDownloadPaymentReport}
            onDelete={onOpenDeleteModal}
          />
        ),
      },
    ],
    [],
  )
