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

namespace Exam.Classes
{
    ///<summary>
    ///Класс со вспомогательными методами
    ///</summary>
    public class Methods
    {
        /// <summary>
        /// Создает отсортированный список рейтингов пользователей типа List<ratings>
        /// </summary>
        /// <return>Отсортированный список рейтингов пользователей</return>
        public static List<ratings> FindRating()
        {
            List<users> users = DBContext.Connect.users.OrderBy(x => x.surname).ToList(); //сортировка пользователей по фамилии
            List<usersmetrics> usersmetrics = DBContext.Connect.usersmetrics.ToList();
            List<ratings> ratings = new List<ratings>();
            foreach (users us in users)
            {
                ratings r = new ratings();
                r.position = 0;
                r.id_user = us.id;
                r.name = $"{us.surname} {us.firstname} {us.patronymic}";
                r.rate = Convert.ToDouble(usersmetrics.Where(x => x.id_user == us.id).Sum(x => x.coefficient));
                ratings.Add(r);
            }
            ratings = ratings.OrderByDescending(x => x.rate).ToList(); //сортировка рейтингов по сумме коэффициентов
            int i = 1;
            foreach (ratings r in ratings)
            {
                r.position = i++;
            }
            return ratings;
        }
    }
}
