import { Tag } from 'lucide-react';
import { ICON_SIZE_MD } from '@/components/icons';
import type { ColumnsType } from 'antd/es/table';
import React from 'react';
import {
    Button,
    Space,
    Tooltip,
} from 'antd';
import dayjs from 'dayjs';
import { formatDate } from '@/lib/utils/export';
import type { ProjetoVersaoItem } from './types';

export function buildProjetoSoftwareVersoesColumns(params: {
    onEditar: (versao: ProjetoVersaoItem) => void;
    onExcluir: (versao: ProjetoVersaoItem) => void;
    canEditar?: boolean;
    canExcluir?: boolean;
    permsLoading?: boolean;
    tooltipSemPermissao?: (acao: string) => string;
}): ColumnsType<ProjetoVersaoItem> {
    const {
        onEditar,
        onExcluir,
        canEditar = true,
        canExcluir = true,
        permsLoading = false,
        tooltipSemPermissao,
    } = params;
    return [
        {
            title: 'Nome',
            dataIndex: 'nome',
            key: 'nome',
            sorter: (a, b) => String(a.nome ?? '').localeCompare(String(b.nome ?? ''), 'pt'),
            render: (nome: string) => (
                <Space>
                    <Tag size={ICON_SIZE_MD} style={{ color: '#1c84c6' }} aria-hidden />
                    <span style={{ fontWeight: 600 }}>{nome || '—'}</span>
                </Space>
            )},
        {
            title: 'Descrição',
            dataIndex: 'descricao',
            key: 'descricao',
            ellipsis: true,
            sorter: (a, b) =>
                String(a.descricao ?? '').localeCompare(String(b.descricao ?? ''), 'pt'),
            render: (desc: string) => (
                <span style={{ color: '#666' }}>
                    {(desc || '').slice(0, 80)}
                    {(desc?.length ?? 0) > 80 ? '…' : ''}
                </span>
            )},
        {
            title: 'Itens',
            key: 'itens',
            width: 80,
            sorter: (a, b) =>
                (Array.isArray(a.itens) ? a.itens.length : 0) -
                (Array.isArray(b.itens) ? b.itens.length : 0),
            render: (_: unknown, record: ProjetoVersaoItem) =>
                Array.isArray(record.itens) ? record.itens.length : 0},
        {
            title: 'Data publicação',
            dataIndex: 'data_publicacao',
            key: 'data_publicacao',
            width: 120,
            sorter: (a, b) =>
                dayjs(a.data_publicacao).valueOf() - dayjs(b.data_publicacao).valueOf(),
            render: (d: string | null) => (d ? formatDate(d, true) : '—')},
        {
            title: '',
            key: 'acoes',
            width: 120,
            render: (_: unknown, record: ProjetoVersaoItem) => (
                <Space>
                    <Tooltip
                        title={
                            !canEditar && !permsLoading && tooltipSemPermissao
                                ? tooltipSemPermissao('editar versões do projeto')
                                : undefined
                        }
                    >
                        <span>
                            <Button
                                type="link"
                                size="small"
                                disabled={!canEditar || permsLoading}
                                onClick={(e) => {
                                    e.stopPropagation();
                                    onEditar(record);
                                }}
                                data-testid={`projeto-versoes-editar-${record.id}`}
                            >
                                Editar
                            </Button>
                        </span>
                    </Tooltip>
                    <Tooltip
                        title={
                            !canExcluir && !permsLoading && tooltipSemPermissao
                                ? tooltipSemPermissao('excluir versões do projeto')
                                : undefined
                        }
                    >
                        <span>
                            <Button
                                type="link"
                                size="small"
                                danger
                                disabled={!canExcluir || permsLoading}
                                onClick={(e) => {
                                    e.stopPropagation();
                                    onExcluir(record);
                                }}
                                data-testid={`projeto-versoes-excluir-${record.id}`}
                            >
                                Excluir
                            </Button>
                        </span>
                    </Tooltip>
                </Space>
            )},
    ];
}
