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

describe('UnverifiedBanner', () => {
  it('severity="info"일 때 파란색 배너를 렌더링한다', () => {
    render(<UnverifiedBanner severity="info" />);
    const banner = screen.getByRole('alert');
    expect(banner.className).toContain('bg-blue-50');
    expect(banner.className).toContain('border-blue-300');
  });

  it('severity="caution"일 때 주황색 배너를 렌더링한다', () => {
    render(<UnverifiedBanner severity="caution" />);
    const banner = screen.getByRole('alert');
    expect(banner.className).toContain('bg-amber-50');
    expect(banner.className).toContain('border-amber-300');
  });

  it('명시적 severity 없고 category="practice" + sourceType="user_submitted" 이면 caution으로 자동 판정된다', () => {
    render(<UnverifiedBanner category="practice" sourceType="user_submitted" />);
    const banner = screen.getByRole('alert');
    expect(banner.className).toContain('bg-amber-50');
    expect(banner.className).toContain('border-amber-300');
  });

  it('명시적 severity 없고 category="general"이면 info로 자동 판정된다', () => {
    render(<UnverifiedBanner category="general" />);
    const banner = screen.getByRole('alert');
    expect(banner.className).toContain('bg-blue-50');
    expect(banner.className).toContain('border-blue-300');
  });

  it('명시적 severity가 주어지면 자동 판정을 무시한다', () => {
    render(<UnverifiedBanner severity="info" category="practice" sourceType="user_submitted" />);
    const banner = screen.getByRole('alert');
    expect(banner.className).toContain('bg-blue-50');
    expect(banner.className).not.toContain('bg-amber-50');
  });

  it('info 배너에 적절한 안내 메시지가 포함된다', () => {
    render(<UnverifiedBanner severity="info" />);
    expect(screen.getByText('참고 정보')).toBeTruthy();
    expect(screen.getByText('이 문서는 아직 전문가 검증을 거치지 않았습니다.')).toBeTruthy();
  });

  it('caution 배너에 경고 메시지가 포함된다', () => {
    render(<UnverifiedBanner severity="caution" />);
    expect(screen.getByText('미검증 실무 정보')).toBeTruthy();
    expect(screen.getByText('이 문서는 사용자 제출 실무 정보로, 전문가 검증이 필요합니다. 실무 적용 전 반드시 확인하세요.')).toBeTruthy();
  });
});
