import { render, screen } from '@testing-library/react';
import { describe, expect, it, vi } from 'vitest';

vi.mock('next/navigation', () => ({
  useRouter: () => ({ push: vi.fn() }),
}));

vi.mock('@/lib/chuyen-nhuong-api', () => ({
  CATEGORY_LABELS: { FURNITURE: 'Nội thất', APPLIANCE: 'Thiết bị', OFFICE_EQUIPMENT: 'Văn phòng', KITCHEN: 'Bếp', PREMISES: 'Mặt bằng', FULL_UNIT: 'Trọn gói' },
  CATEGORY_ICONS: {
    FURNITURE: () => <span data-testid="icon-furniture" />,
    APPLIANCE: () => <span data-testid="icon-appliance" />,
    OFFICE_EQUIPMENT: () => <span data-testid="icon-office" />,
    KITCHEN: () => <span data-testid="icon-kitchen" />,
    PREMISES: () => <span data-testid="icon-premises" />,
    FULL_UNIT: () => <span data-testid="icon-full" />,
  },
  CONDITION_LABELS: { NEW: 'Mới', LIKE_NEW: 'Như mới', GOOD: 'Tốt', FAIR: 'Trung bình', WORN: 'Cũ' },
  transferApi: { estimate: vi.fn(), create: vi.fn() },
}));

vi.mock('@/lib/transfer-wizard-store', () => {
  const state = {
    currentStep: 0,
    category: null as string | null,
    items: [] as unknown[],
    title: '',
    description: '',
    address: '',
    district: '',
    city: '',
    askingPriceVND: 0,
    pricingSource: 'MANUAL',
    isNegotiable: false,
    aiEstimate: null,
    isEstimating: false,
    setCategory: vi.fn(),
    setStep: vi.fn(),
    addItem: vi.fn(),
    removeItem: vi.fn(),
    setAiEstimate: vi.fn(),
    setIsEstimating: vi.fn(),
    setListingDetails: vi.fn(),
    reset: vi.fn(),
  };
  return {
    useTransferWizardStore: () => state,
  };
});

import { TransferWizardClient } from '../transfer-wizard-client';

describe('TransferWizardClient', () => {
  it('renders wizard title', () => {
    render(<TransferWizardClient />);
    expect(screen.getByText('Đăng tin chuyển nhượng')).toBeInTheDocument();
  });

  it('renders step indicators (4 steps)', () => {
    render(<TransferWizardClient />);
    expect(screen.getByText('1')).toBeInTheDocument();
    expect(screen.getByText('2')).toBeInTheDocument();
    expect(screen.getByText('3')).toBeInTheDocument();
    expect(screen.getByText('4')).toBeInTheDocument();
  });

  it('renders current step label "Danh mục" for step 0', () => {
    render(<TransferWizardClient />);
    expect(screen.getByText('Danh mục')).toBeInTheDocument();
  });

  it('renders category selection buttons', () => {
    render(<TransferWizardClient />);
    expect(screen.getByText('Nội thất')).toBeInTheDocument();
    expect(screen.getByText('Thiết bị')).toBeInTheDocument();
  });

  it('renders navigation buttons', () => {
    render(<TransferWizardClient />);
    expect(screen.getByText(/Quay lại/)).toBeInTheDocument();
    expect(screen.getByText(/Tiếp theo/)).toBeInTheDocument();
  });

  it('disables back button on first step', () => {
    render(<TransferWizardClient />);
    const backBtn = screen.getByText(/Quay lại/).closest('button');
    expect(backBtn).toBeDisabled();
  });
});
