"""
Pytest configuration and shared fixtures for varbook tests.
"""

import pytest
import pandas as pd
import numpy as np
from pathlib import Path
import tempfile
import shutil


@pytest.fixture
def sample_variants_df():
    """
    Create a sample variants dataframe for testing.

    Returns a DataFrame with:
    - variant_id
    - logfc columns for multiple models
    - aaq columns for multiple models
    - is_prioritized_by columns for multiple models
    """
    n_variants = 50

    df = pd.DataFrame({
        'variant_id': [f'var_{i}' for i in range(n_variants)],
        'chrom': ['chr1'] * n_variants,
        'pos': range(1000, 1000 + n_variants),
    })

    # Add model-specific columns for KUN_FB dataset
    models = ['KUN_FB_model1', 'KUN_FB_model2', 'KUN_FB_model3']

    for model in models:
        df[f'logfc-{model}'] = np.random.randn(n_variants)
        df[f'aaq-{model}'] = np.random.uniform(0, 0.2, n_variants)
        df[f'is_prioritized_by-{model}'] = np.random.choice([True, False], n_variants)

    # Add some dataset-level columns
    df['count_of_prioritized-KUN_FB'] = df[[f'is_prioritized_by-{m}' for m in models]].sum(axis=1)

    return df


@pytest.fixture
def temp_output_dir():
    """
    Create a temporary directory for test outputs.

    Yields the Path object, then cleans up after the test.
    """
    temp_path = Path(tempfile.mkdtemp())
    yield temp_path
    shutil.rmtree(temp_path, ignore_errors=True)


@pytest.fixture
def sample_markdown_files(temp_output_dir):
    """
    Create sample markdown files for testing PDF generation.

    Returns a dict with paths to 'intro', 'variant1', 'variant2', 'conclusion'.
    """
    files = {}

    # Intro file
    intro = temp_output_dir / 'intro.md'
    intro.write_text("""
# Introduction

This is a sample report for genetic variant analysis.

## Background

We analyzed multiple variants across different datasets.
""")
    files['intro'] = intro

    # Variant files
    variant1 = temp_output_dir / 'variant1.md'
    variant1.write_text("""
# Variant: var_1

## Summary

This variant shows significant effects in multiple models.

## Details

- logFC: 0.5
- AAQ: 0.15
- Prioritized: Yes
""")
    files['variant1'] = variant1

    variant2 = temp_output_dir / 'variant2.md'
    variant2.write_text("""
# Variant: var_2

## Summary

This variant has moderate effects.

## Details

- logFC: -0.3
- AAQ: 0.08
- Prioritized: No
""")
    files['variant2'] = variant2

    # Conclusion file
    conclusion = temp_output_dir / 'conclusion.md'
    conclusion.write_text("""
# Conclusion

We identified several high-priority variants for further investigation.

## Next Steps

1. Validate findings in experimental models
2. Perform functional assays
3. Clinical correlation studies
""")
    files['conclusion'] = conclusion

    return files


@pytest.fixture
def sample_datasets():
    """Return a list of sample dataset names."""
    return ['KUN_FB', 'KUN_HDMA', 'KUN_THYROID']


@pytest.fixture
def sample_models():
    """Return a list of sample model names."""
    return [
        'KUN_FB_model1',
        'KUN_FB_model2',
        'KUN_FB_model3',
        'KUN_HDMA_model1',
        'KUN_HDMA_model2',
    ]
