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

import type { components } from '@/lib/gen';

import UploadPlaceholder from './UploadPlaceholder';

type MarketplaceProject = components['schemas']['ProjectResponse'];

// Mock the modal context hook
vi.mock('@/context/ModalContext', () => ({
  useModalContext: () => ({
    openModalWithData: vi.fn(),
    closeModal: vi.fn(),
    getModalData: vi.fn(),
  }),
}));

describe('UploadPlaceholder', () => {
  const baseProject: MarketplaceProject = {
    id: 'test-project-123',
    title: 'Test Project',
    description: 'Test description',
    credit_bounty: 100,
    credits_held_in_escrow: 100,
    status: 'IN_PROGRESS',
    created_at: '2024-01-01T00:00:00Z',
    updated_at: '2024-01-01T00:00:00Z',
    creator_id: 'creator-123',
    creator_handle: 'testcreator',
    creator_display_name: 'Test Creator',
    is_creator: true,
  };

  const onUploadComplete = vi.fn();

  it('renders for creator', () => {
    const { container } = render(
      <UploadPlaceholder
        project={baseProject}
        onUploadComplete={onUploadComplete}
      />
    );
    expect(container).toMatchSnapshot();
  });

  it('renders for fulfiller', () => {
    const { container } = render(
      <UploadPlaceholder
        project={{
          ...baseProject,
          is_creator: false,
          is_fulfiller: true,
        }}
        onUploadComplete={onUploadComplete}
      />
    );
    expect(container).toMatchSnapshot();
  });

  it('renders with submission count', () => {
    const { container } = render(
      <UploadPlaceholder
        project={{
          ...baseProject,
          is_creator: false,
          is_fulfiller: true,
        }}
        existingSubmissionCount={3}
        onUploadComplete={onUploadComplete}
      />
    );
    expect(container).toMatchSnapshot();
  });

  it('renders with zero submission count', () => {
    const { container } = render(
      <UploadPlaceholder
        project={{
          ...baseProject,
          is_creator: false,
          is_fulfiller: true,
        }}
        existingSubmissionCount={0}
        onUploadComplete={onUploadComplete}
      />
    );
    expect(container).toMatchSnapshot();
  });

  it('does not render when project is completed', () => {
    const { container } = render(
      <UploadPlaceholder
        project={{
          ...baseProject,
          status: 'COMPLETED',
        }}
        onUploadComplete={onUploadComplete}
      />
    );
    expect(container.firstChild).toBeNull();
  });
});
