/// Author : Maxime Rohmer
/// Date : 09/06/2023
/// File : DriverData.cs
/// Brief : File containing classes that behave just like structures to store data about drivers 
/// Version : Beta 1.0

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TrackTrends
{
    public class DriverData
    {
        public bool DRS;        //True = Drs is opened
        public int GapToLeader; //In ms
        public int LapTime;     //In ms
        public string Name;     //Ex: LECLERC
        public int Position;    //Ex: 1
        public int Sector1;     //in ms
        public int Sector2;     //in ms
        public int Sector3;     //in ms
        public Tyre CurrentTyre;//Ex Soft 11 laps

        public DriverData(bool dRS, int gapToLeader, int lapTime, string name, int position, int sector1, int sector2, int sector3, Tyre tyre)
        {
            DRS = dRS;
            GapToLeader = gapToLeader;
            LapTime = lapTime;
            Name = name;
            Position = position;
            Sector1 = sector1;
            Sector2 = sector2;
            Sector3 = sector3;
            CurrentTyre = tyre;
        }
        /// <summary>
        /// Creates a default driver data with empty values
        /// </summary>
        public DriverData()
        {
            DRS = false;
            GapToLeader = -1;
            LapTime = -1;
            Name = "Unknown";
            Position = -1;
            Sector1 = -1;
            Sector2 = -1;
            Sector3 = -1;
            CurrentTyre = new Tyre(Tyre.Type.Undefined, -1);
        }
        /// <summary>
        /// Method that displays all the data found in a string
        /// </summary>
        /// <returns>string containing all the driver datas</returns>
        public override string ToString()
        {
            string result = "";

            //Position
            result += "Position : " + Position + Environment.NewLine;
            //Gap
            result += "GapToLeader : " + Reader.ConvertMsToTime(GapToLeader) + Environment.NewLine;
            //LapTime
            result += "LapTime : " + Reader.ConvertMsToTime(LapTime) + Environment.NewLine;
            //DRS
            result += "DRS : " + DRS + Environment.NewLine;
            //Tyres
            result += "Uses " + CurrentTyre.Coumpound + " tyre " + CurrentTyre.NumberOfLaps + " laps old" + Environment.NewLine;
            //Name
            result += "DriverName : " + Name + Environment.NewLine;
            //Sector 1
            result += "Sector1 : " + Reader.ConvertMsToTime(Sector1) + Environment.NewLine;
            //Sector 1
            result += "Sector2 : " + Reader.ConvertMsToTime(Sector2) + Environment.NewLine;
            //Sector 1
            result += "Sector3 : " + Reader.ConvertMsToTime(Sector3) + Environment.NewLine;

            return result;
        }
    }
    //Structure to store tyres infos
    public struct Tyre
    {
        //If new tyres were to be added you will have to need to change this enum
        public enum Type
        {
            Soft,
            Medium,
            Hard,
            Inter,
            Wet,
            Undefined
        }
        public Type Coumpound;
        public int NumberOfLaps;
        public Tyre(Type type, int laps)
        {
            Coumpound = type;
            NumberOfLaps = laps;
        }
    }
}
