#!/usr/bin/env python3
"""성능 테스트 - 처리 시간, 메모리 사용량 측정"""

import sys
import tempfile
import time
from pathlib import Path

import pytest

sys.path.insert(0, str(Path(__file__).parent.parent))

from code_reviewer import CodeReviewer


class TestPerformance:
    """성능 테스트 클래스"""

    @pytest.fixture(autouse=True)
    def setup(self):
        """테스트 설정"""
        self.reviewer = CodeReviewer()

    def test_small_file_performance(self):
        """성능: 작은 파일 (<100줄) 처리 시간"""
        with tempfile.NamedTemporaryFile(mode="w", suffix=".py", delete=False) as f:
            for i in range(50):
                f.write(f"# Line {i}\n")
            temp_path = f.name

        try:
            start_time = time.time()
            result = self.reviewer.review(temp_path)
            end_time = time.time()

            # 성능 체크: 1초 이내 완료
            assert end_time - start_time < 1.0
            assert result is not None
        finally:
            Path(temp_path).unlink()

    def test_medium_file_performance(self):
        """성능: 중간 파일 (100-500줄) 처리 시간"""
        with tempfile.NamedTemporaryFile(mode="w", suffix=".py", delete=False) as f:
            for i in range(300):
                f.write(f"# Line {i}\n")
            temp_path = f.name

        try:
            start_time = time.time()
            result = self.reviewer.review(temp_path)
            end_time = time.time()

            # 성능 체크: 3초 이내 완료
            assert end_time - start_time < 3.0
            assert result is not None
        finally:
            Path(temp_path).unlink()

    def test_large_file_performance(self):
        """성능: 큰 파일 (>500줄) 처리 시간"""
        with tempfile.NamedTemporaryFile(mode="w", suffix=".py", delete=False) as f:
            for i in range(1000):
                f.write(f"# Line {i}\n")
            temp_path = f.name

        try:
            start_time = time.time()
            result = self.reviewer.review(temp_path)
            end_time = time.time()

            # 성능 체크: 5초 이내 완료
            assert end_time - start_time < 5.0
            assert result is not None
        finally:
            Path(temp_path).unlink()
