import { useMemo, useState } from 'react';
import { Card, Group, Text, ThemeIcon, Flex, Table, Avatar, UnstyledButton } from '@mantine/core';
import { IconUsers, IconArrowUp, IconArrowDown, IconArrowsSort } from '@tabler/icons-react';
import { translate } from '../../../../utils/i18n';
import { isTaskComplete, isTaskOverdue } from './reportUtils';

const getAssigneeId = (task) => {
    if (task.assigned_to && task.assigned_to.id != null) return String(task.assigned_to.id);
    if (task.assignedTo_id != null) return String(task.assignedTo_id);
    return null;
};

const TeamWorkloadTable = ({ tasks = [], members = [], statuses = [], sections = [] }) => {
    const [sortCol, setSortCol] = useState('name');
    const [sortDir, setSortDir] = useState('asc');

    const rows = useMemo(() => {
        const byMember = new Map();
        for (const m of members) {
            if (!m || m.id == null) continue;
            byMember.set(String(m.id), {
                id: String(m.id),
                name: m.name || translate('Unknown'),
                avatar: m.avatar || null,
                total: 0,
                open: 0,
                overdue: 0,
                completed: 0,
            });
        }

        for (const t of tasks) {
            const id = getAssigneeId(t);
            if (!id) continue;
            let row = byMember.get(id);
            if (!row) {
                const name = t.assigned_to?.name || translate('Unknown');
                row = { id, name, avatar: t.assigned_to?.avatar || null, total: 0, open: 0, overdue: 0, completed: 0 };
                byMember.set(id, row);
            }
            row.total += 1;
            const done = isTaskComplete(t, statuses, sections);
            if (done) row.completed += 1;
            else row.open += 1;
            if (isTaskOverdue(t, statuses, sections)) row.overdue += 1;
        }

        const list = Array.from(byMember.values());
        const dir = sortDir === 'asc' ? 1 : -1;
        list.sort((a, b) => {
            if (sortCol === 'name') return a.name.localeCompare(b.name) * dir;
            return (a[sortCol] - b[sortCol]) * dir;
        });
        return list;
    }, [tasks, members, statuses, sections, sortCol, sortDir]);

    const toggleSort = (col) => {
        if (sortCol === col) {
            setSortDir(sortDir === 'asc' ? 'desc' : 'asc');
        } else {
            setSortCol(col);
            setSortDir(col === 'name' ? 'asc' : 'desc');
        }
    };

    const SortHeader = ({ col, label, align = 'left' }) => {
        const active = sortCol === col;
        const Icon = !active ? IconArrowsSort : sortDir === 'asc' ? IconArrowUp : IconArrowDown;
        return (
            <UnstyledButton
                onClick={() => toggleSort(col)}
                style={{
                    display: 'flex',
                    alignItems: 'center',
                    justifyContent: align === 'right' ? 'flex-end' : 'flex-start',
                    gap: 4,
                    width: '100%',
                    fontSize: 11,
                    fontWeight: 700,
                    color: active ? '#39758D' : '#64748B',
                    textTransform: 'uppercase',
                    letterSpacing: '0.4px',
                }}
            >
                {label}
                <Icon size={12} stroke={1.8} style={{ opacity: active ? 1 : 0.5 }} />
            </UnstyledButton>
        );
    };

    return (
        <Card padding="md" radius="md" withBorder h="100%">
            <Card.Section withBorder inheritPadding py="xs" className="bg-[#EBF1F4] mb-2">
                <Group gap="xs">
                    <ThemeIcon size="sm" radius="sm" variant="light" color="#39758D">
                        <IconUsers size={14} />
                    </ThemeIcon>
                    <Text fw={600} size="sm">{translate('Team Workload')}</Text>
                </Group>
            </Card.Section>

            {rows.length === 0 ? (
                <Flex align="center" justify="center" mih={160}>
                    <Text c="dimmed" size="sm">{translate('No members assigned to tasks yet')}</Text>
                </Flex>
            ) : (
                <Table horizontalSpacing="sm" verticalSpacing="xs" highlightOnHover withRowBorders={false}>
                    <Table.Thead style={{ background: '#FAFBFC' }}>
                        <Table.Tr>
                            <Table.Th><SortHeader col="name" label={translate('Member')} /></Table.Th>
                            <Table.Th style={{ textAlign: 'right', width: 72 }}><SortHeader col="total" label={translate('Total')} align="right" /></Table.Th>
                            <Table.Th style={{ textAlign: 'right', width: 72 }}><SortHeader col="open" label={translate('Open')} align="right" /></Table.Th>
                            <Table.Th style={{ textAlign: 'right', width: 80 }}><SortHeader col="overdue" label={translate('Overdue')} align="right" /></Table.Th>
                            <Table.Th style={{ textAlign: 'right', width: 72 }}><SortHeader col="completed" label={translate('Done')} align="right" /></Table.Th>
                        </Table.Tr>
                    </Table.Thead>
                    <Table.Tbody>
                        {rows.map((r) => (
                            <Table.Tr key={r.id}>
                                <Table.Td>
                                    <Group gap="xs" wrap="nowrap">
                                        <Avatar src={r.avatar || null} radius="xl" size={28} color="#39758D">
                                            {(r.name || '?').slice(0, 2).toUpperCase()}
                                        </Avatar>
                                        <Text size="sm" fw={600} truncate>{r.name}</Text>
                                    </Group>
                                </Table.Td>
                                <Table.Td style={{ textAlign: 'right', fontVariantNumeric: 'tabular-nums' }}>
                                    <Text size="sm" fw={600}>{r.total}</Text>
                                </Table.Td>
                                <Table.Td style={{ textAlign: 'right', fontVariantNumeric: 'tabular-nums' }}>
                                    <Text size="sm" fw={600} c={r.open === 0 ? 'dimmed' : undefined}>{r.open}</Text>
                                </Table.Td>
                                <Table.Td style={{ textAlign: 'right', fontVariantNumeric: 'tabular-nums' }}>
                                    <Text size="sm" fw={700} c={r.overdue > 0 ? '#EF4444' : 'dimmed'}>{r.overdue}</Text>
                                </Table.Td>
                                <Table.Td style={{ textAlign: 'right', fontVariantNumeric: 'tabular-nums' }}>
                                    <Text size="sm" fw={600}>{r.completed}</Text>
                                </Table.Td>
                            </Table.Tr>
                        ))}
                    </Table.Tbody>
                </Table>
            )}
        </Card>
    );
};

export default TeamWorkloadTable;
