// @vitest-environment jsdom

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

describe('QnaRenderer', () => {
  it('question과 answer 모두 없으면 null을 렌더한다', () => {
    const { container } = render(<QnaRenderer />);
    expect(container.innerHTML).toBe('');
  });

  it('질문만 있으면 질문 카드만 렌더한다', () => {
    render(<QnaRenderer question="보험 해지 시 환급금은?" />);
    expect(screen.getByText('Q')).toBeTruthy();
    expect(screen.getByText('보험 해지 시 환급금은?')).toBeTruthy();
    expect(screen.queryByText('A')).toBeNull();
  });

  it('답변만 있으면 답변 카드만 렌더한다', () => {
    render(<QnaRenderer answer="해약환급금은 납입보험료의 일부입니다." />);
    expect(screen.getByText('A')).toBeTruthy();
    expect(screen.queryByText('Q')).toBeNull();
  });

  it('질문과 답변 모두 렌더한다', () => {
    render(<QnaRenderer question="테스트 질문" answer="테스트 답변" />);
    expect(screen.getByText('Q')).toBeTruthy();
    expect(screen.getByText('A')).toBeTruthy();
    expect(screen.getByText('테스트 질문')).toBeTruthy();
    expect(screen.getByText('테스트 답변')).toBeTruthy();
  });

  it('전문가 이름을 표시한다', () => {
    render(<QnaRenderer question="q" answer="a" expertName="이해철" />);
    expect(screen.getByText('이해철')).toBeTruthy();
  });

  it('채널명을 표시한다', () => {
    render(<QnaRenderer question="q" answer="a" channelName="앞서가는 설계사" />);
    expect(screen.getByText('앞서가는 설계사')).toBeTruthy();
  });

  it('수집일을 한국어 날짜 형식으로 표시한다', () => {
    const fakeTimestamp = {
      toDate: () => new Date('2026-04-01'),
    };
    render(<QnaRenderer question="q" answer="a" expertName="테스트전문가" collectedAt={fakeTimestamp} />);
    expect(screen.getByText(/2026년/)).toBeTruthy();
  });

  it('markdown bold(**text**)를 strong 태그로 렌더한다', () => {
    render(<QnaRenderer question="**보험 해지** 시 환급금은?" answer="**해약환급금**은 납입보험료의 일부입니다." />);
    const strongs = document.querySelectorAll('strong');
    expect(strongs.length).toBe(2);
    expect(strongs[0].textContent).toBe('보험 해지');
    expect(strongs[1].textContent).toBe('해약환급금');
  });

  it('bold 마크다운 없는 텍스트는 그대로 렌더한다', () => {
    render(<QnaRenderer question="일반 질문" answer="일반 답변" />);
    const strongs = document.querySelectorAll('strong');
    expect(strongs.length).toBe(0);
  });
});
