// @vitest-environment jsdom

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

describe('SourceBadge', () => {
  it('sourceType이 없으면 null을 렌더한다', () => {
    const { container } = render(<SourceBadge />);
    expect(container.innerHTML).toBe('');
  });

  it('sm 사이즈에서 단일 배지를 렌더한다', () => {
    render(<SourceBadge sourceType="policy_pdf" authorityTier={1} size="sm" />);
    expect(screen.getByText('공식확인')).toBeTruthy();
    // SVG 아이콘이 렌더된다
    expect(screen.getByRole('status').querySelector('svg')).toBeTruthy();
  });

  it('md 사이즈에서 신뢰등급 + 출처종류 배지를 렌더한다', () => {
    render(<SourceBadge sourceType="kakao_expert" authorityTier={3.5} size="md" />);
    expect(screen.getByText('전문가검증')).toBeTruthy();
    expect(screen.getByText('전문가 단톡')).toBeTruthy();
  });

  it('expert_verified일 때 검증 배지를 추가로 렌더한다', () => {
    render(<SourceBadge sourceType="wiki_editorial" authorityTier={3} verificationStatus="expert_verified" size="md" />);
    expect(screen.getByText('검증 완료')).toBeTruthy();
  });

  it('unverified일 때 검증 배지를 렌더하지 않는다', () => {
    render(<SourceBadge sourceType="user_submitted" authorityTier={4} verificationStatus="unverified" size="md" />);
    expect(screen.queryByText('미검증')).toBeNull();
  });

  it('기본 사이즈는 sm이다', () => {
    render(<SourceBadge sourceType="youtube" authorityTier={4} />);
    expect(screen.getByText('참고정보')).toBeTruthy();
  });

  it('md 사이즈에서 출처종류 라벨(SOURCE_TYPE_LABEL)도 여전히 표시된다', () => {
    render(<SourceBadge sourceType="policy_pdf" authorityTier={1} size="md" />);
    expect(screen.getByText('약관 원문')).toBeTruthy();
  });

  it('verificationStatus 전달 시 VerificationTag가 렌더된다', () => {
    render(<SourceBadge sourceType="policy_pdf" authorityTier={1} verificationStatus="expert_verified" size="md" />);
    // VerificationTag는 role="status"를 가지므로 두 개가 있어야 한다 (TrustBadge + VerificationTag)
    const statusElements = screen.getAllByRole('status');
    expect(statusElements.length).toBeGreaterThanOrEqual(2);
  });

  it('role="status" 존재 확인 (접근성)', () => {
    render(<SourceBadge sourceType="policy_pdf" authorityTier={1} />);
    expect(screen.getByRole('status')).toBeTruthy();
  });
});
