"""
Pytest configuration and shared fixtures for solver tests.
"""
import pytest
import json
from pathlib import Path


@pytest.fixture
def fixtures_dir():
    """Return path to fixtures directory."""
    return Path(__file__).parent / "fixtures"


@pytest.fixture
def simple_problem(fixtures_dir):
    """Load simple store fixture."""
    with open(fixtures_dir / "simple_store.json") as f:
        return json.load(f)


@pytest.fixture
def base_config():
    """Return base configuration."""
    return {
        "timeout_seconds": 60,
        "random_seed": 42,
        "priorities": [
            {"name": "position_coverage", "rank": 1, "weight": 100000},
            {"name": "labor_cost", "rank": 2, "weight": 10000},
            {"name": "hours_fairness", "rank": 3, "weight": 1000},
            {"name": "seniority", "rank": 4, "weight": 100},
            {"name": "minimize_overtime", "rank": 5, "weight": 10},
            {"name": "employee_preferences", "rank": 6, "weight": 1}
        ]
    }


@pytest.fixture
def base_employee():
    """Return base employee template."""
    return {
        "userId": 1,
        "name": "Test Employee",
        "role": 4,
        "hourlyRate": 15.00,
        "hoursRequested": 32.0,
        "hoursMin": 20.0,
        "hoursMax": 40.0,
        "currentPeriodHours": 0.0,
        "shiftsThisWeek": 0,
        "availability": [
            {"dayOfWeek": dow, "startTime": "08:00", "endTime": "22:00"}
            for dow in range(1, 8)
        ],
        "allowedPositionIds": [1],
        "timeOff": []
    }


@pytest.fixture
def base_shift():
    """Return base shift template."""
    return {
        "shiftId": 1,
        "date": "2026-02-16",
        "dayOfWeek": 1,
        "startTime": "09:00",
        "endTime": "17:00",
        "durationHours": 8.0,
        "positionId": 1,
        "positionName": "Sales Associate",
        "minRoleId": 4,
        "isLocked": False
    }
