"""
TDD RED 단계: test_browser_stealth.py
browser.py의 스텔스 모드 관련 상수 및 함수에 대한 테스트 스위트
"""

import sys
from pathlib import Path
from typing import Callable

import pytest

# scripts 디렉토리를 path에 추가
sys.path.insert(0, str(Path(__file__).parent.parent))

from browser import (  # pyright: ignore[reportMissingImports]
    BLOCKED_RESOURCE_TYPES,
    HARMFUL_ARGS,
    STEALTH_ARGS,
    create_resource_blocker,
    generate_stealth_headers,
    get_google_referer,
)

# ────────────────────────────────────────────────────────
# STEALTH_ARGS 상수 테스트
# ────────────────────────────────────────────────────────


def test_stealth_args_count():
    """STEALTH_ARGS가 정확히 54개인지 확인"""
    assert len(STEALTH_ARGS) == 55


def test_stealth_args_contains_automation_controlled():
    """STEALTH_ARGS에 AutomationControlled 비활성화 플래그가 포함되어야 함"""
    assert "--disable-blink-features=AutomationControlled" in STEALTH_ARGS


def test_stealth_args_no_duplicates():
    """STEALTH_ARGS에 중복 플래그가 없어야 함"""
    assert len(STEALTH_ARGS) == len(set(STEALTH_ARGS))


# ────────────────────────────────────────────────────────
# HARMFUL_ARGS 상수 테스트
# ────────────────────────────────────────────────────────


def test_harmful_args_count():
    """HARMFUL_ARGS가 정확히 5개인지 확인"""
    assert len(HARMFUL_ARGS) == 5


def test_harmful_args_contains_enable_automation():
    """HARMFUL_ARGS에 --enable-automation 플래그가 포함되어야 함"""
    assert "--enable-automation" in HARMFUL_ARGS


def test_harmful_args_no_overlap_with_stealth():
    """HARMFUL_ARGS와 STEALTH_ARGS는 겹치는 항목이 없어야 함"""
    overlap = set(HARMFUL_ARGS) & set(STEALTH_ARGS)
    assert len(overlap) == 0


# ────────────────────────────────────────────────────────
# BLOCKED_RESOURCE_TYPES 상수 테스트
# ────────────────────────────────────────────────────────


def test_blocked_resource_types():
    """BLOCKED_RESOURCE_TYPES에 image, font, media가 포함되어야 함"""
    assert "image" in BLOCKED_RESOURCE_TYPES
    assert "font" in BLOCKED_RESOURCE_TYPES
    assert "media" in BLOCKED_RESOURCE_TYPES


# ────────────────────────────────────────────────────────
# generate_stealth_headers 함수 테스트
# ────────────────────────────────────────────────────────


def test_generate_stealth_headers_returns_dict():
    """generate_stealth_headers가 dict를 반환하고 User-Agent 키를 포함해야 함"""
    headers = generate_stealth_headers()
    assert isinstance(headers, dict)
    assert "User-Agent" in headers


def test_generate_stealth_headers_has_user_agent():
    """generate_stealth_headers의 User-Agent 값이 비어있지 않아야 함"""
    headers = generate_stealth_headers()
    assert headers["User-Agent"] != ""
    assert len(headers["User-Agent"]) > 0


# ────────────────────────────────────────────────────────
# get_google_referer 함수 테스트
# ────────────────────────────────────────────────────────


def test_get_google_referer():
    """get_google_referer가 정확한 Google URL을 반환해야 함"""
    referer = get_google_referer()
    assert referer == "https://www.google.com/"


# ────────────────────────────────────────────────────────
# create_resource_blocker 함수 테스트
# ────────────────────────────────────────────────────────


def test_create_resource_blocker_returns_callable():
    """create_resource_blocker가 callable을 반환해야 함"""
    blocker = create_resource_blocker()
    assert callable(blocker)
