using Modèle;
using Persistance;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Business
{
///
/// Class Manager qui gère les requins, les requins ajoutés, les requins modifiés et les fun facts
///
public class Manager
{
public ObservableCollection Requins { get; private set; } //ObservableCollection les requins qui ont déjà été validés
public ObservableCollection RequinsEdit { get; private set; } //ObservableCollection les requins qui ont été modifiés par des utilisateurs et qui n'ont pas encore été validés
public ObservableCollection RequinsAdd { get; private set; } //ObservableCollection les requins qui ont été ajoutés par des utilisateurs et qui n'ont pas encore été validés
public Requin SelectedRequin { get; set; } //Requin actuellement utilisé dans l'application
public List FunFacts { get; private set; } = new List(); //List la liste des fun facts
///
/// DéPENDANCE
///
public IPersistanceManager Pers { get; set; } //IPersistanceManager ce qui permet de gérer la persistance de l'applcation
///
/// constructeur avec INJECTION DE LA DéPENDANCE
///
public Manager(IPersistanceManager pers)
{
Requins = new ObservableCollection();
RequinsEdit = new ObservableCollection();
RequinsAdd = new ObservableCollection();
Pers = pers;
}
///
/// Méthode LoadRequins de la classe Manager qui permet de remplir les listes de requins grâce à l'IPersistanceManager
///
public void LoadRequins()
{
var data = Pers.LoadRequins();
Requins.Clear();
foreach(var r in data.reqs)
{
Requins.Add(r);
}
RequinsAdd.Clear();
foreach(var rA in data.reqsAdd)
{
RequinsAdd.Add(rA);
}
RequinsEdit.Clear();
foreach(var rE in data.reqsEdit)
{
RequinsEdit.Add(rE);
}
}
///
/// Méthode SaveRequins de la classe Manager qui permet de sauvegarder les listes de requins grâce à l'IPersistanceManager
///
public void SaveRequins()
{
List req = new List();
req.AddRange(Requins);
List edit = new List();
edit.AddRange(RequinsEdit);
List add = new List();
add.AddRange(RequinsAdd);
Pers.SaveRequins(req, add, edit);
}
///
/// Méthode AjouterRequin de la classe Manager qui permet d'ajouter un requin dans la liste des requins
///
/// Requin qui va être ajouté dans la liste
/// Booléen : true si il a été ajouté, false sinon
public bool AjouterRequin(Requin req)
{
Requin test = Requins.SingleOrDefault(r => r.Equals(req));
if (Requins.Contains(req) && test!=null){
return false;
}
Requins.Add(req);
return true;
}
///
/// Méthode SupprimerRequin de la classe Manager qui permet de supprimer un requin de la liste des requins
///
/// Requin qui va être supprimé dans la liste
/// Booléen : true si il a été supprimé, false sinon
public bool SupprimerRequin(Requin req)
{
Requin test = Requins.SingleOrDefault(r => r.Equals(req));
if (!Requins.Contains(req) || test == null)
{
return false;
}
Requins.Remove(req);
return true;
}
///
/// Méthode GetRequin de la classe Manager qui permet de récupérer un requin de la liste des requins
///
/// Requin que l'on cherche dans dans la liste
/// Requin trouvé
public Requin GetRequin(Requin req)
{
return Requins.SingleOrDefault(r => r.Equals(req));
}
///
/// Méthode ModifieRequin de la classe Manager qui permet de modifier un ancien requin de la liste des requins à partir d'un nouveau
///
/// Requin l'ancien requin dans la liste des requins
/// Requin le nouveau requin
/// Booléen : true si il a été modifié, false sinon
public bool ModifieRequin(Requin oldR, Requin newR)
{
if (!oldR.Equals(newR))
{
return false;
}
Requins.Remove(oldR);
Requins.Add(newR);
return true;
}
///
/// Méthode AjouterRequinEdit de la classe Manager qui permet d'ajouter un requin dans la liste des requins modifiés
///
/// Requin qui va être ajouté dans la liste
/// Booléen : true si il a été ajouté, false sinon
public bool AjouterRequinEdit(Requin req)
{
Requin test = RequinsEdit.SingleOrDefault(r => r.Equals(req));
if (RequinsEdit.Contains(req) && test != null)
{
return false;
}
RequinsEdit.Add(req);
return true;
}
///
/// Méthode SupprimerRequinEdit de la classe Manager qui permet de supprimer un requin de la liste des requins modifiés
///
/// Requin qui va être supprimé dans la liste
/// Booléen : true si il a été supprimé, false sinon
public bool SupprimerRequinEdit(Requin req)
{
Requin test = RequinsEdit.SingleOrDefault(r => r.Equals(req));
if (!RequinsEdit.Contains(req) || test == null)
{
return false;
}
RequinsEdit.Remove(req);
return true;
}
///
/// Méthode AjouterRequinAdd de la classe Manager qui permet d'ajouter un requin dans la liste des requins ajoutés
///
/// Requin qui va être ajouté dans la liste
/// Booléen : true si il a été ajouté, false sinon
public bool AjouterRequinAdd(Requin req)
{
Requin test = RequinsAdd.SingleOrDefault(r => r.Equals(req));
if (RequinsAdd.Contains(req) && test != null)
{
return false;
}
RequinsAdd.Add(req);
return true;
}
///
/// Méthode SupprimerRequinAdd de la classe Manager qui permet de supprimer un requin de la liste des requins ajoutés
///
/// Requin qui va être supprimé dans la liste
/// Booléen : true si il a été supprimé, false sinon
public bool SupprimerRequinAdd(Requin req)
{
Requin test = RequinsAdd.SingleOrDefault(r => r.Equals(req));
if (!RequinsAdd.Contains(req) || test == null)
{
return false;
}
RequinsAdd.Remove(req);
return true;
}
///
/// Méthode GetRequinEdit de la classe Manager qui permet de récupérer un requin de la liste des requins modifiés
///
/// Requin que l'on cherche dans dans la liste
/// Requin trouvé
public Requin GetRequinEdit(Requin req)
{
return RequinsEdit.SingleOrDefault(r => r.Equals(req));
}
///
/// Méthode GetRequinAdd de la classe Manager qui permet de récupérer un requin de la liste des requins ajoutés
///
/// Requin que l'on cherche dans dans la liste
/// Requin trouvé
public Requin GetRequinAdd(Requin req)
{
return RequinsAdd.SingleOrDefault(r => r.Equals(req));
}
///
/// Méthode RechercherRequins qui permet de rechercher des requins dans une ObservableCollection en fonction de leurs zones et d'un motif
///
/// ObservableCollection dans laquelle on fait la recherche
/// string sur lequel on fait la recherche
/// Zone? sur laquelle on fait la recherche
/// List contenant tous les requins trouvés en fonction du motif et de la zone
public List RechercherRequins(ObservableCollection lRech, Nullable zone, string motif)
{
List nvReq = new List();
int test = 0;
if (!string.IsNullOrWhiteSpace(motif))
{
foreach (Requin req in lRech)
{
if (zone == null)
{
if (req.Nom.Contains(motif) || req.NomSci.Contains(motif))
{
nvReq.Add(req);
}
}
else
{
foreach (Zone z in req.Repartition)
{
if ((req.Nom.Contains(motif) || req.NomSci.Contains(motif)) && zone == z)
{
test++;
}
}
if (test > 0)
{
nvReq.Add(req);
}
}
test = 0;
}
}
return nvReq;
}
///
/// Méthode vérifierRequin qui permet de vérifiersi les strings que l'on donnerait au constructeur de requin son vides
///
/// Booléen : true si il n'y en a pas de vide, false sinon
public bool verifierRequin(String nom, String nomSci, String description, String photo, String video, String photoCarte)
{
if (String.IsNullOrWhiteSpace(nom) || String.IsNullOrWhiteSpace(nomSci) || String.IsNullOrWhiteSpace(description) || String.IsNullOrWhiteSpace(photo)
|| String.IsNullOrWhiteSpace(video) || String.IsNullOrWhiteSpace(photoCarte))
{
return false;
}
return true;
}
///
/// Méthode LoadFunFacts de la classe Manager qui permet de charger la liste de fun facts grâce à l'IPersistanceManager
///
public void LoadFunFacts()
{
FunFacts.Clear();
foreach(String fun in Pers.LoadFunFacts())
{
FunFacts.Add(fun);
}
}
///
/// Méthode LoadFunFacts de la classe Manager qui permet de sauvegarder la liste de fun facts grâce à l'IPersistanceManager
///
public void SaveFunFacts()
{
Pers.SaveFunFacts(FunFacts);
}
}
}