import type { ColumnDef } from '@tanstack/react-table';
import { IconButton } from '@/components/common/IconButton';
import type { MailboxServerListItem } from '@/features/mailboxes/types';
import type { TranslateFn } from '@/features/users/lib/permission-i18n';
import { tableRowIconButtonClass } from '@/lib/icon-button-classes';

type OpenEditHandler = (server: MailboxServerListItem) => void;
type DeleteHandler = (server: MailboxServerListItem) => void;

export function getMailboxServersColumns(
    onOpenEdit: OpenEditHandler,
    onDelete: DeleteHandler,
    t: TranslateFn,
): ColumnDef<MailboxServerListItem>[] {
    return [
        {
            accessorKey: 'name',
            header: t('settings.mailboxes.servers_table.column_name'),
            cell: ({ row }) => (
                <button
                    type="button"
                    className="cursor-pointer text-left text-sm font-semibold text-primary hover:opacity-80"
                    onClick={() => onOpenEdit(row.original)}
                >
                    {row.original.name}
                </button>
            ),
        },
        {
            id: 'connection',
            header: t('settings.mailboxes.servers_table.column_connection'),
            cell: ({ row }) => (
                <span className="font-mono text-xs">
                    {row.original.host}:{row.original.port}
                </span>
            ),
        },
        {
            id: 'security',
            header: t('settings.mailboxes.servers_table.column_security'),
            cell: ({ row }) => (
                <span className="text-sm">
                    {row.original.protocol.toUpperCase()} · {row.original.encryption.toUpperCase()}
                </span>
            ),
        },
        {
            accessorKey: 'accounts_count',
            header: t('settings.mailboxes.servers_table.column_accounts'),
            cell: ({ row }) => <span className="text-sm">{row.original.accounts_count}</span>,
        },
        {
            id: 'actions',
            header: () => (
                <span className="block text-end text-[11px] font-semibold leading-tight text-foreground/85">
                    {t('settings.mailboxes.servers_table.column_actions')}
                </span>
            ),
            cell: ({ row }) => (
                <div className="flex justify-end gap-1">
                    <IconButton
                        type="button"
                        variant="text"
                        color="ghost"
                        size="sm"
                        className={tableRowIconButtonClass}
                        aria-label={t('settings.mailboxes.servers_table.edit_aria')}
                        onClick={() => onOpenEdit(row.original)}
                        icon="solar:pen-bold-duotone"
                    />
                    <IconButton
                        type="button"
                        variant="text"
                        color="danger"
                        size="sm"
                        className={tableRowIconButtonClass}
                        aria-label={t('settings.mailboxes.servers_table.delete_aria')}
                        disabled={row.original.accounts_count > 0}
                        onClick={() => onDelete(row.original)}
                        icon="solar:trash-bin-trash-bold-duotone"
                    />
                </div>
            ),
        },
    ];
}
