"""
Tests for varbook.config module.
"""

import os
import pytest
from varbook.config import VarbookConfig


def test_default_formats():
    """Test default column format configurations."""
    config = VarbookConfig()

    assert config.model_col_format == '%A-%M'
    assert config.dataset_col_format == '%A-%D'
    assert config.model_name_format == '%D_%m'


def test_format_model_column():
    """Test model-specific column name formatting."""
    config = VarbookConfig()

    result = config.format_model_column('logfc', 'KUN_FB_microglia')
    assert result == 'logfc-KUN_FB_microglia'

    result = config.format_model_column('aaq', 'KUN_HDMA_astrocyte')
    assert result == 'aaq-KUN_HDMA_astrocyte'


def test_format_dataset_column():
    """Test dataset-specific column name formatting."""
    config = VarbookConfig()

    result = config.format_dataset_column('prioritized_models_count', 'KUN_FB')
    assert result == 'prioritized_models_count-KUN_FB'

    result = config.format_dataset_column('count_of_prioritized', 'KUN_HDMA')
    assert result == 'count_of_prioritized-KUN_HDMA'


def test_format_model_name():
    """Test full model name formatting."""
    config = VarbookConfig()

    result = config.format_model_name('KUN_FB', 'microglia')
    assert result == 'KUN_FB_microglia'

    result = config.format_model_name('KUN_THYROID', 'follicular')
    assert result == 'KUN_THYROID_follicular'


def test_parse_model_name():
    """Test model name parsing."""
    config = VarbookConfig()

    result = config.parse_model_name('KUN_FB_microglia')
    assert result['dataset'] == 'KUN_FB'
    assert result['model_without_dataset'] == 'microglia'

    result = config.parse_model_name('KUN_HDMA_astrocyte')
    assert result['dataset'] == 'KUN_HDMA'
    assert result['model_without_dataset'] == 'astrocyte'

    # Test model without underscore
    result = config.parse_model_name('SIMPLE')
    assert result['dataset'] == 'SIMPLE'
    assert result['model_without_dataset'] == ''


def test_environment_variable_override(monkeypatch):
    """Test that environment variables override defaults."""
    monkeypatch.setenv('VARBOOK_MODEL_SPECIFIC_COLUMN_FORMAT', '%M.%A')
    monkeypatch.setenv('VARBOOK_DATASET_SPECIFIC_COLUMN_FORMAT', '%D.%A')
    monkeypatch.setenv('VARBOOK_MODEL_NAME_FORMAT', '%D-%m')

    config = VarbookConfig()

    assert config.model_col_format == '%M.%A'
    assert config.dataset_col_format == '%D.%A'
    assert config.model_name_format == '%D-%m'

    # Test with custom formats
    result = config.format_model_column('logfc', 'KUN_FB_microglia')
    assert result == 'KUN_FB_microglia.logfc'

    result = config.format_dataset_column('prioritized_models_count', 'KUN_FB')
    assert result == 'KUN_FB.prioritized_models_count'

    result = config.format_model_name('KUN_FB', 'microglia')
    assert result == 'KUN_FB-microglia'
