using Microsoft.ML.Data;

namespace HorseRacingPredictor.Horses.ML
{
    /// <summary>
    /// Classe che rappresenta i dati di input per l'addestramento del modello ML.
    /// Contiene le feature selezionate dalle corse passate.
    /// </summary>
    public class ModelInput
    {
        // Etichetta da prevedere: posizione finale (1 = vincitore, 2 = secondo posto, ecc.)
        [LoadColumn(0)]
        [ColumnName("FinishPosition")]
        public float FinishPosition { get; set; }

        // Feature principali sul cavallo
        [LoadColumn(1)]
        [ColumnName("Age")]
        public float Age { get; set; }

        [LoadColumn(2)]
        [ColumnName("HandicapRating")]
        public float HandicapRating { get; set; }

        [LoadColumn(3)]
        [ColumnName("Weight")]
        public float Weight { get; set; }

        [LoadColumn(4)]
        [ColumnName("WeightCarried")]
        public float WeightCarried { get; set; }

        [LoadColumn(5)]
        [ColumnName("Barrier")]
        public float Barrier { get; set; }

        // Statistiche di carriera
        [LoadColumn(6)]
        [ColumnName("CareerRuns")]
        public float CareerRuns { get; set; }

        [LoadColumn(7)]
        [ColumnName("CareerWins")]
        public float CareerWins { get; set; }

        [LoadColumn(8)]
        [ColumnName("CareerStrikeRate")]
        public float CareerStrikeRate { get; set; }

        [LoadColumn(9)]
        [ColumnName("CareerROI")]
        public float CareerROI { get; set; }

        // Statistiche di pista
        [LoadColumn(10)]
        [ColumnName("ThisTrackRuns")]
        public float ThisTrackRuns { get; set; }

        [LoadColumn(11)]
        [ColumnName("ThisTrackWins")]
        public float ThisTrackWins { get; set; }

        [LoadColumn(12)]
        [ColumnName("ThisTrackStrikeRate")]
        public float ThisTrackStrikeRate { get; set; }

        [LoadColumn(13)]
        [ColumnName("ThisDistanceRuns")]
        public float ThisDistanceRuns { get; set; }

        [LoadColumn(14)]
        [ColumnName("ThisDistanceWins")]
        public float ThisDistanceWins { get; set; }

        [LoadColumn(15)]
        [ColumnName("ThisDistanceStrikeRate")]
        public float ThisDistanceStrikeRate { get; set; }

        // Statistiche fantino
        [LoadColumn(16)]
        [ColumnName("JockeyLast100Wins")]
        public float JockeyLast100Wins { get; set; }

        [LoadColumn(17)]
        [ColumnName("JockeyLast100StrikeRate")]
        public float JockeyLast100StrikeRate { get; set; }

        // Statistiche allenatore
        [LoadColumn(18)]
        [ColumnName("TrainerLast100Wins")]
        public float TrainerLast100Wins { get; set; }

        [LoadColumn(19)]
        [ColumnName("TrainerLast100StrikeRate")]
        public float TrainerLast100StrikeRate { get; set; }

        // Quota iniziale (puņ essere predittiva)
        [LoadColumn(20)]
        [ColumnName("BestFixedOdds")]
        public float BestFixedOdds { get; set; }

        // Cambia il tipo da int a float
        public float Rating1 { get; set; }
        public float Rating2 { get; set; }
        public float Rating3 { get; set; }
        public float Rating4 { get; set; }
        public float Rating5 { get; set; }
    }
}
