"""Shared pytest fixtures for the PII service tests."""

from __future__ import annotations

import sys
import os

# Make the service root importable from tests/
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))

from unittest.mock import MagicMock, patch

import pytest

from layers.regex_layer import RegexLayer
from pipeline import Pipeline
from pseudonymize import AESEncryptor, PseudonymMapper

# ---------------------------------------------------------------------------
# Cryptography fixtures
# ---------------------------------------------------------------------------

TEST_KEY_B64 = "dmV5bGFudC1kZXYta2V5LTMyYnl0ZXMtcGFkZGluZy0="  # 32 bytes


@pytest.fixture
def encryptor() -> AESEncryptor:
    return AESEncryptor(TEST_KEY_B64)


@pytest.fixture
def redis_mock() -> MagicMock:
    mock = MagicMock()
    mock.set.return_value = True
    mock.get.return_value = None
    mock.scan_iter.return_value = iter([])
    return mock


@pytest.fixture
def pseudo_mapper(redis_mock, encryptor) -> PseudonymMapper:
    return PseudonymMapper(redis_mock, encryptor, ttl_seconds=3600)


# ---------------------------------------------------------------------------
# Layer fixtures
# ---------------------------------------------------------------------------


@pytest.fixture
def regex_layer() -> RegexLayer:
    return RegexLayer()


@pytest.fixture
def pipeline_regex_only() -> Pipeline:
    """Pipeline with NER disabled for fast unit tests."""
    with patch("config.NER_ENABLED", False):
        p = Pipeline()
    return p
