// GET: TrainingPrograms
        public ActionResult IndexPastTraining()
        {
            using (SqlConnection conn = Connection)
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = @" SELECT tp.Id AS TrainingId, tp.[Name] AS TrainingName, tp.StartDate, tp.EndDate, tp.MaxAttendees, e.FirstName, e.LastName, e.Id AS EmployeeId
                                        FROM TrainingProgram tp
                                        LEFT JOIN EmployeeTraining et ON et.TrainingProgramId = tp.Id
                                        LEFT JOIN Employee e ON et.EmployeeId = e.Id
                                        WHERE EndDate < @today";
                    //
                    cmd.Parameters.Add(new SqlParameter("@today", DateTime.Now));
                    SqlDataReader reader = cmd.ExecuteReader();

                    

                    List<TrainingWithEmployees> trainingPrograms = new List<TrainingWithEmployees>();

                    int IdOrdinal = reader.GetOrdinal("TrainingId");
                    int NameOrdinal = reader.GetOrdinal("TrainingName");
                    int StartDateOrdinal = reader.GetOrdinal("StartDate");
                    int EndDateOrdinal = reader.GetOrdinal("EndDate");
                    int MaxAttendeesOrdinal = reader.GetOrdinal("MaxAttendees");

                    while (reader.Read())
                    {
                        var trainingId = reader.GetInt32(reader.GetOrdinal("TrainingId"));
                        var trainingAlreadyAdded = trainingPrograms.FirstOrDefault(d => d.Id == trainingId);

                        if (trainingAlreadyAdded == null)
                        {

                            TrainingWithEmployees trainingProgram = new TrainingWithEmployees
                            {
                                Id = reader.GetInt32(IdOrdinal),
                                Name = reader.GetString(NameOrdinal),
                                StartDate = reader.GetDateTime(StartDateOrdinal),
                                EndDate = reader.GetDateTime(EndDateOrdinal),
                                MaxAttendees = reader.GetInt32(MaxAttendeesOrdinal)
                            };

                            trainingPrograms.Add(trainingProgram);

                            var hasEmployee = !reader.IsDBNull(reader.GetOrdinal("EmployeeId"));

                            if (hasEmployee)
                            {
                                trainingProgram.EmployeesAttending.Add(new BasicEmployee()
                                {
                                    Id = reader.GetInt32(reader.GetOrdinal("EmployeeId")),
                                    FirstName = reader.GetString(reader.GetOrdinal("FirstName")),
                                    LastName = reader.GetString(reader.GetOrdinal("LastName")),
                                });
                            }
                        }
                        else
                        {
                            var hasEmployee = !reader.IsDBNull(reader.GetOrdinal("EmployeeId"));

                            if (hasEmployee)
                            {
                                trainingAlreadyAdded.EmployeesAttending.Add(new BasicEmployee()
                                {
                                    Id = reader.GetInt32(reader.GetOrdinal("EmployeeId")),
                                    FirstName = reader.GetString(reader.GetOrdinal("FirstName")),
                                    LastName = reader.GetString(reader.GetOrdinal("LastName")),
                                });
                            }
                        }
                        
                    }
                    reader.Close();

                    return View(trainingPrograms);
                }
            }
        }
        // GET: TrainingPrograms/Details/5
        public ActionResult Details(int id)
        {
            using (SqlConnection conn = Connection)
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = @"
                        SELECT tp.Id AS TrainingId, tp.[Name] AS TrainingName, tp.StartDate, tp.EndDate, tp.MaxAttendees, e.FirstName, e.LastName, e.Id AS EmployeeId
                        FROM TrainingProgram tp
                        LEFT JOIN EmployeeTraining et ON et.TrainingProgramId = tp.Id
                        LEFT JOIN Employee e ON et.EmployeeId = e.Id
                        WHERE tp.Id = @id";

                    cmd.Parameters.Add(new SqlParameter("@id", id));
                    SqlDataReader reader = cmd.ExecuteReader();

                    TrainingWithEmployees trainingProgram = null;

                    while (reader.Read())
                    {
                        if (trainingProgram == null)
                        {
                            trainingProgram = new TrainingWithEmployees
                            {
                                Id = reader.GetInt32(reader.GetOrdinal("TrainingId")),
                                Name = reader.GetString(reader.GetOrdinal("TrainingName")),
                                StartDate = reader.GetDateTime(reader.GetOrdinal("StartDate")),
                                EndDate = reader.GetDateTime(reader.GetOrdinal("EndDate")),
                                MaxAttendees = reader.GetInt32(reader.GetOrdinal("MaxAttendees"))
                            };
                            if (!reader.IsDBNull(reader.GetOrdinal("FirstName")))
                            {
                                var employee = new BasicEmployee
                                {
                                    Id = reader.GetInt32(reader.GetOrdinal("EmployeeId")),
                                    FirstName = reader.GetString(reader.GetOrdinal("FirstName")),
                                    LastName = reader.GetString(reader.GetOrdinal("LastName")),
                                };

                                trainingProgram.EmployeesAttending.Add(employee);

                            }
                        } else if (!reader.IsDBNull(reader.GetOrdinal("FirstName")))
                        {
                            var employee = new BasicEmployee
                            {
                                Id = reader.GetInt32(reader.GetOrdinal("EmployeeId")),
                                FirstName = reader.GetString(reader.GetOrdinal("FirstName")),
                                LastName = reader.GetString(reader.GetOrdinal("LastName")),
                            };

                            trainingProgram.EmployeesAttending.Add(employee);
                        }
                    }
                    reader.Close();
                    

                    if (trainingProgram == null)
                    {
                        return NotFound($"No Training Program found with the ID of {id}");
                    }

                    return View(trainingProgram);
                }
            }
            
        }