using System;

namespace HorseRacingPredictor.Horses.ML
{
    /// <summary>
    /// Classe che contiene il risultato della previsione per un singolo cavallo in una corsa.
    /// </summary>
    public class HorseRacePrediction
    {
        // Informazioni identificative
        public string HorseId { get; set; }
        public string HorseName { get; set; }
        public string RaceMeeting { get; set; }
        public int RaceNumber { get; set; }
        public DateTime RaceDate { get; set; }

        // Risultati della previsione
        public float PredictedPosition { get; set; }
        public float WinProbability { get; set; }
        public float PlaceProbability { get; set; }

        // Rating ML calcolato (combinazione di probabilità e altri fattori)
        public int MLRating { get; set; }

        // Quota attuale per valutazione valore
        public float CurrentOdds { get; set; }
        
        // Valore calcolato (rapporto tra probabilità e quota)
        public float Value => WinProbability > 0 ? (WinProbability * 100) / (1 / CurrentOdds) : 0;
        
        // Indicazione se questo cavallo è considerato di valore
        public bool IsValueBet => Value > 1.1f;

        // Posizione reale del cavallo
        public string ActualPosition { get; set; }

        // Indicazione se la previsione è accurata
        public bool IsAccuratePrediction { get; set; }

        // Metodo per valutare l'accuratezza della previsione
        public void EvaluateAccuracy()
        {
            if (!string.IsNullOrEmpty(ActualPosition) && int.TryParse(ActualPosition, out int actualPos))
            {
                IsAccuratePrediction = Math.Abs(actualPos - PredictedPosition) <= 0.5;
            }
        }
    }
}