/**
 * regulationChangeDetector.ts 단위 테스트
 *
 * 테스트 대상: detectRegulationChange
 */

import { describe, it, expect } from 'vitest';
import { detectRegulationChange } from '../regulationChangeDetector';

describe('detectRegulationChange', () => {
  it('regulation 문서 + sourceMeta 변경 → shouldReReview: true', () => {
    const result = detectRegulationChange(
      { sourceType: 'regulation', sourceMeta: { version: 1 } },
      { sourceType: 'regulation', sourceMeta: { version: 2 } }
    );
    expect(result.shouldReReview).toBe(true);
    expect(result.reason).toContain('sourceMeta');
  });

  it('regulation 문서 + 변경 없음 → shouldReReview: false', () => {
    const meta = { version: 1 };
    const result = detectRegulationChange(
      { sourceType: 'regulation', sourceMeta: meta, sourceUrl: 'https://example.com' },
      { sourceType: 'regulation', sourceMeta: meta, sourceUrl: 'https://example.com' }
    );
    expect(result.shouldReReview).toBe(false);
    expect(result.reason).toBe('no_regulation_change');
  });

  it('비규정 문서(sourceType=wiki) + sourceMeta 변경 → shouldReReview: false', () => {
    const result = detectRegulationChange(
      { sourceType: 'wiki', sourceMeta: { version: 1 } },
      { sourceType: 'wiki', sourceMeta: { version: 2 } }
    );
    expect(result.shouldReReview).toBe(false);
    expect(result.reason).toBe('not_regulation');
  });

  it('policy_pdf 문서 + sourceUrl 변경 → shouldReReview: true', () => {
    const result = detectRegulationChange(
      { sourceType: 'policy_pdf', sourceUrl: 'https://old.com/doc.pdf' },
      { sourceType: 'policy_pdf', sourceUrl: 'https://new.com/doc.pdf' }
    );
    expect(result.shouldReReview).toBe(true);
    expect(result.reason).toContain('sourceUrl');
  });

  it('regulation 문서 + regulationId 변경 → shouldReReview: true', () => {
    const result = detectRegulationChange(
      { sourceType: 'regulation', regulationId: 'REG-001' },
      { sourceType: 'regulation', regulationId: 'REG-002' }
    );
    expect(result.shouldReReview).toBe(true);
    expect(result.reason).toContain('regulationId');
  });

  it('regulation 문서 + effectiveDate 변경 → shouldReReview: true', () => {
    const result = detectRegulationChange(
      { sourceType: 'regulation', effectiveDate: '2024-01-01' },
      { sourceType: 'regulation', effectiveDate: '2025-01-01' }
    );
    expect(result.shouldReReview).toBe(true);
    expect(result.reason).toContain('effectiveDate');
  });

  it('sourceType 없음 → shouldReReview: false (not_regulation)', () => {
    const result = detectRegulationChange(
      { sourceMeta: { version: 1 } },
      { sourceMeta: { version: 2 } }
    );
    expect(result.shouldReReview).toBe(false);
    expect(result.reason).toBe('not_regulation');
  });

  it('court_ruling 문서는 규정 아님 → shouldReReview: false', () => {
    const result = detectRegulationChange(
      { sourceType: 'court_ruling', sourceMeta: { version: 1 } },
      { sourceType: 'court_ruling', sourceMeta: { version: 2 } }
    );
    expect(result.shouldReReview).toBe(false);
    expect(result.reason).toBe('not_regulation');
  });
});
