"""Tests for ML models"""
import pytest
import numpy as np
from app.ml.models import MatchPredictor, prepare_target


def test_prepare_target():
    """Test target preparation"""
    class MockMatch:
        def __init__(self, home_score, away_score):
            self.home_score = home_score
            self.away_score = away_score
    
    # Home win
    match = MockMatch(2, 1)
    assert prepare_target(match) == 0
    
    # Draw
    match = MockMatch(1, 1)
    assert prepare_target(match) == 1
    
    # Away win
    match = MockMatch(0, 2)
    assert prepare_target(match) == 2


def test_match_predictor_train():
    """Test model training"""
    # Create dummy data
    X_train = np.random.rand(100, 15)
    y_train = np.random.randint(0, 3, 100)
    
    predictor = MatchPredictor(model_type="logistic_regression")
    metrics = predictor.train(X_train, y_train)
    
    assert "train_accuracy" in metrics
    assert metrics["train_accuracy"] >= 0
    assert metrics["train_accuracy"] <= 1


def test_match_predictor_predict():
    """Test model prediction"""
    # Train a simple model
    X_train = np.random.rand(100, 15)
    y_train = np.random.randint(0, 3, 100)
    
    predictor = MatchPredictor(model_type="logistic_regression")
    predictor.train(X_train, y_train)
    
    # Predict
    X_test = np.random.rand(10, 15)
    predictions, probabilities = predictor.predict(X_test)
    
    assert len(predictions) == 10
    assert probabilities.shape == (10, 3)
    assert np.allclose(probabilities.sum(axis=1), 1.0)  # Probabilities sum to 1

