<commit_before>﻿using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using AVF.MemberManagement.StandardLibrary.Models;
using AVF.MemberManagement.StandardLibrary.Tbo;
using Microsoft.Extensions.Logging;
using Prism.Navigation;
using System.Collections.ObjectModel;
using AVF.MemberManagement.StandardLibrary.Interfaces;
using System.Threading.Tasks;

namespace AVF.MemberManagement.ViewModels
{
    public class SelectTrainerPageViewModel : FindMembersViewModelBase
    {
        private string _selectedDate;

        public string SelectedDateString
        {
            get => _selectedDate;
            set => SetProperty(ref _selectedDate, value);
        }

        private TrainingsModel _training;

        public TrainingsModel SelectedTraining
        {
            get => _training;
            set => SetProperty(ref _training, value);
        }

        private Mitglied _trainer;

        public Mitglied Trainer
        {
            get => _trainer;
            set => SetProperty(ref _trainer, value);
        }

        private Mitglied _cotrainer1;

        public Mitglied Cotrainer1
        {
            get => _cotrainer1;
            set => SetProperty(ref _cotrainer1, value);
        }

        private Mitglied _cotrainer2;

        public Mitglied Cotrainer2
        {
            get => _cotrainer2;
            set => SetProperty(ref _cotrainer2, value);
        }

        private Mitglied _selectedParticipant;

        public Mitglied SelectedParticipant
        {
            get => _selectedParticipant;
            set => SetProperty(ref _selectedParticipant, value);
        }

        private ObservableCollection<Mitglied> _previousParticipants = new ObservableCollection<Mitglied>();

        public override ObservableCollection<Mitglied> PreviousParticipants
        {
            get => _previousParticipants;
            set => SetProperty(ref _previousParticipants, value);
        }

        private readonly IRepository<Training> _trainingsRepository;
        private readonly IRepository<Mitglied> _mitgliederRepository;

        public SelectTrainerPageViewModel(INavigationService navigationService, ILogger logger, IRepository<Training> trainingsRepository, IRepository<Mitglied> mitgliederRepository) : base(navigationService, logger)
        {
            _trainingsRepository = trainingsRepository;
            _mitgliederRepository = mitgliederRepository;
        }

        public override async void OnNavigatedTo(NavigationParameters parameters)
        {
            try
            {
                Mitglieder = await _mitgliederRepository.GetAsync();
                Mitglieder.Sort(CompareMemberNames);

                SelectedTraining = (TrainingsModel)parameters["SelectedTraining"];
                SelectedDateString = (string)parameters["SelectedDateString"];

                Trainer = (Mitglied)parameters["Trainer"];
                Cotrainer1 = (Mitglied)parameters["Cotrainer1"];
                Cotrainer2 = (Mitglied)parameters["Cotrainer2"];

                Participants.Clear();
                Participants.Add(Trainer);

                if (Cotrainer1 != null)
                {
                    Participants.Add(Cotrainer1);
                }

                if (Cotrainer2 != null)
                {
                    Participants.Add(Cotrainer2);
                }

                Title = $"{SelectedTraining.Class.Time} ({SelectedTraining.Class.Trainer.FirstName})";

                //ParticipantsCountText = $"Trainer ({Participants.Count}):";

                await GetPreviousTrainers();

                FindMembers(_searchText);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
        }

        private async Task GetPreviousTrainers()
        {
            //Bei beiden ausgetretene Mitglieder nicht mehr berücksichtigen: HasResigned()-Methode
            //Bei beiden egal ob Trainer, Cotrainer1 oder 2
            //Find alle Mitglieder, die jemals bei diesem Kurs Übungsleitung gemacht haben, sortiere diese nach Häufigkeit
            //Mit Schalter "optional": Finde alle Trainer über alle Kurse, die noch nicht in der ersten Liste sind, und füge diese auch geordnet nach Häufigkeit ein.

            //Wenn Partipants leer springe in der Mobile-View automatisch auf den Tab PreviousParticipants.

            PreviousParticipants.Clear();<commit_msg>Nearly working, todo max 3 Participants (Trainers)<commit_after>﻿using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using AVF.MemberManagement.StandardLibrary.Models;
using AVF.MemberManagement.StandardLibrary.Tbo;
using Microsoft.Extensions.Logging;
using Prism.Navigation;
using System.Collections.ObjectModel;
using AVF.MemberManagement.StandardLibrary.Interfaces;
using System.Threading.Tasks;

namespace AVF.MemberManagement.ViewModels
{
    public class SelectTrainerPageViewModel : FindMembersViewModelBase
    {
        private string _selectedDate;

        public string SelectedDateString
        {
            get => _selectedDate;
            set => SetProperty(ref _selectedDate, value);
        }

        private TrainingsModel _training;

        public TrainingsModel SelectedTraining
        {
            get => _training;
            set => SetProperty(ref _training, value);
        }

        private Mitglied _trainer;

        public Mitglied Trainer
        {
            get => _trainer;
            set => SetProperty(ref _trainer, value);
        }

        private Mitglied _cotrainer1;

        public Mitglied Cotrainer1
        {
            get => _cotrainer1;
            set => SetProperty(ref _cotrainer1, value);
        }

        private Mitglied _cotrainer2;

        public Mitglied Cotrainer2
        {
            get => _cotrainer2;
            set => SetProperty(ref _cotrainer2, value);
        }

        private ObservableCollection<Mitglied> _previousParticipants = new ObservableCollection<Mitglied>();

        public override ObservableCollection<Mitglied> PreviousParticipants
        {
            get => _previousParticipants;
            set => SetProperty(ref _previousParticipants, value);
        }

        private readonly IRepository<Training> _trainingsRepository;
        private readonly IRepository<Mitglied> _mitgliederRepository;

        public SelectTrainerPageViewModel(INavigationService navigationService, ILogger logger, IRepository<Training> trainingsRepository, IRepository<Mitglied> mitgliederRepository) : base(navigationService, logger)
        {
            _trainingsRepository = trainingsRepository;
            _mitgliederRepository = mitgliederRepository;
        }

        public override async void OnNavigatedTo(NavigationParameters parameters)
        {
            try
            {
                Mitglieder = await _mitgliederRepository.GetAsync();
                Mitglieder.Sort(CompareMemberNames);

                SelectedTraining = (TrainingsModel)parameters["SelectedTraining"];
                SelectedDateString = (string)parameters["SelectedDateString"];

                Trainer = (Mitglied)parameters["Trainer"];
                Cotrainer1 = (Mitglied)parameters["Cotrainer1"];
                Cotrainer2 = (Mitglied)parameters["Cotrainer2"];

                Participants.Clear();
                Participants.Add(Trainer);

                if (Cotrainer1 != null)
                {
                    Participants.Add(Cotrainer1);
                }

                if (Cotrainer2 != null)
                {
                    Participants.Add(Cotrainer2);
                }

                Title = $"{SelectedTraining.Class.Time} ({SelectedTraining.Class.Trainer.FirstName})";

                //ParticipantsCountText = $"Trainer ({Participants.Count}):";

                await FindPreviousParticipants();

                FindMembers(_searchText);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
        }

        public override async Task FindPreviousParticipants()
        {
            //Bei beiden ausgetretene Mitglieder nicht mehr berücksichtigen: HasResigned()-Methode
            //Bei beiden egal ob Trainer, Cotrainer1 oder 2
            //Find alle Mitglieder, die jemals bei diesem Kurs Übungsleitung gemacht haben, sortiere diese nach Häufigkeit
            //Mit Schalter "optional": Finde alle Trainer über alle Kurse, die noch nicht in der ersten Liste sind, und füge diese auch geordnet nach Häufigkeit ein.

            //Wenn Partipants leer springe in der Mobile-View automatisch auf den Tab PreviousParticipants.

            PreviousParticipants.Clear();
{'fraction_non_alphanumeric': 0.07138009049773755, 'fraction_numerical': 0.00418552036199095, 'mean_word_length': 2.217248908296943, 'pattern_counts': {'":': 2, '<': 17, '<?xml version=': 0, '>': 43, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5455216', 'n_tokens_mistral': 2315, 'n_tokens_neox': 2157, 'n_words': 512}