"""Tests for logging system."""

import logging
from pathlib import Path

import pytest

from src.core.exceptions import ConfigurationError
from src.logging import get_logger


def test_get_logger_with_name():
    """Test getting logger with name."""
    logger = get_logger("test_module")
    assert isinstance(logger, logging.Logger)
    assert logger.name == "test_module"


def test_get_logger_root():
    """Test getting root logger."""
    logger = get_logger()
    assert isinstance(logger, logging.Logger)


def test_logger_logs_message(caplog):
    """Test that logger actually logs messages."""
    logger = get_logger("test")
    logger.info("Test message")
    assert "Test message" in caplog.text


def test_logger_with_missing_config(temp_dir, monkeypatch):
    """Test logger with missing config file."""
    # Temporarily change config path to non-existent location
    from src.core import constants
    original_path = constants.PATHS["config"]
    constants.PATHS["config"] = temp_dir / "nonexistent"
    
    with pytest.raises(ConfigurationError):
        get_logger("test")
    
    # Restore original path
    constants.PATHS["config"] = original_path


def test_logger_creates_directories(temp_dir, monkeypatch):
    """Test that logger creates log directories."""
    from src.core import constants
    original_path = constants.PATHS["logs"]
    constants.PATHS["logs"] = temp_dir / "logs"
    
    # Create minimal config
    config_dir = temp_dir / "config"
    config_dir.mkdir()
    logging_config = config_dir / "logging.yaml"
    logging_config.write_text(
        """
version: 1
disable_existing_loggers: false

formatters:
  detailed:
    format: '%(message)s'

handlers:
  console:
    class: logging.StreamHandler
    level: INFO
    formatter: detailed

root:
  level: INFO
  handlers:
    - console
"""
    )
    
    logger = get_logger("test")
    assert isinstance(logger, logging.Logger)
    
    # Restore original path
    constants.PATHS["logs"] = original_path

