import { render, screen } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
import { TransferItemTable } from '../transfer-item-table';

const baseItem = {
  id: 'i1',
  name: 'Tủ lạnh Toshiba',
  brand: 'Toshiba',
  modelName: 'GR-RT624WE-PMV',
  category: 'APPLIANCE' as const,
  condition: 'GOOD' as const,
  purchaseYear: 2022,
  originalPriceVND: '15000000',
  askingPriceVND: '8000000',
  aiEstimatePriceVND: '7500000',
  aiConfidence: 0.85,
  quantity: 1,
};

describe('TransferItemTable', () => {
  it('renders empty state when no items', () => {
    render(<TransferItemTable items={[]} />);
    expect(
      screen.getByText('Chưa có danh sách vật phẩm.'),
    ).toBeInTheDocument();
  });

  it('renders all column headers', () => {
    render(<TransferItemTable items={[baseItem]} />);
    expect(screen.getByText('Tên')).toBeInTheDocument();
    expect(screen.getByText('Loại')).toBeInTheDocument();
    expect(screen.getByText('Tình trạng')).toBeInTheDocument();
    expect(screen.getByText('Thương hiệu')).toBeInTheDocument();
    expect(screen.getByText('SL')).toBeInTheDocument();
    expect(screen.getByText('Giá yêu cầu')).toBeInTheDocument();
    expect(screen.getByText('Giá AI')).toBeInTheDocument();
  });

  it('renders item row with localized currency formatting', () => {
    render(<TransferItemTable items={[baseItem]} />);
    expect(screen.getByText('Tủ lạnh Toshiba')).toBeInTheDocument();
    expect(screen.getByText('GR-RT624WE-PMV')).toBeInTheDocument();
    expect(screen.getByText(/8\.000\.000/)).toBeInTheDocument();
    expect(screen.getByText(/7\.500\.000/)).toBeInTheDocument();
  });

  it('falls back to em-dash for missing brand and AI estimate', () => {
    render(
      <TransferItemTable
        items={[
          {
            ...baseItem,
            id: 'i2',
            brand: null,
            aiEstimatePriceVND: null,
            aiConfidence: null,
          },
        ]}
      />,
    );
    const dashes = screen.getAllByText('—');
    expect(dashes.length).toBeGreaterThanOrEqual(2);
  });
});
