using Business;
using Modèle;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp1
{
///
/// Classe DescWeGoEventArgs qui implémente EventArgs
/// Elle permet de créer un argument qui permet de transformer le content control de la main window en UserControlDescription après avoir cliquer sur un UserControlRequin
///
public class DescWeGoEventArgs : EventArgs
{
///
/// Le requin que l'on veut passer lors de l'événement
///
public Requin Requin { get; private set; }
///
/// L'Evénement pour changer le content control
///
///
public DescWeGoEventArgs(Requin requin) => Requin = requin;
}
///
/// Logique d'interaction pour UserControlEdit.xaml
///
public partial class UserControlEdit : UserControl
{
///
/// UserControl qui permet de modifier un requin
///
public UserControlEdit()
{
InitializeComponent();
DataContext = Mgr;
}
///
/// ManagerUser lié à celui de l'app
///
public Manager Mgr => (Application.Current as App).LeManager;
///
/// ManagerUser lié à celui de l'app
///
public ManagerUsers MgrUser => (Application.Current as App).LeManagerUsers;
private Requin _requin;
///
/// Requin qui permet de mettre à jour l'affichage de la page
///
public Requin requin
{
get { return _requin; }
set
{
_requin = value;
UptadeUi(_requin);
}
}
private List consList = new List //List qui contient tous les status de conservation
{
Conservation.EX,
Conservation.EW,
Conservation.CR,
Conservation.EN,
Conservation.VU,
Conservation.NT,
Conservation.LC,
Conservation.DD,
Conservation.NE
};
///
/// L'Event handler DescWeGo
///
public event EventHandler DescWeGo;
///
/// L'Evénement appelé lors du clique
///
///
protected virtual void OnDescWeGo(DescWeGoEventArgs args)
=> DescWeGo?.Invoke(this, args);
///
/// Méthode qui permet de mettre à jour l'affichage de la page à partir d'un requin
///
///
private void UptadeUi(Requin requin)
{
//Met à jour les textBoxs
leNom.Contenu = requin.Nom;
nomSci.Contenu = requin.NomSci;
desc.Contenu = requin.Description;
LienPhoto.Contenu = requin.Photo;
LienVid.Contenu = requin.Video;
LienMap.Contenu = requin.PhotoCarte;
funFact.Contenu = requin.FunFact;
//Boucles qui permettent de cocher le bon radioButton en fonction du status de conservation du requin
foreach (Control control in this.radioButtons.Children) //For each sur tout ce que possède radioButtons
{
if (control is RadioButton radio) //Regarde si le control est un RadioButton
{
if (radio.Content is string radString) //Transforme le radio.content en string
{
if (radString == requin.StatutCons.ToString()) //Test si il est égal au ToString du status de conservation du requin
{
radio.IsChecked = true; //Coche le RadioButton
goto loopEnd; //Permet de sortir des boucles quand le radioButton a été coché
}
}
}
}
loopEnd:
//Coche les bonnes zones en fonction de la répartition du requin
foreach (Zone z in requin.Repartition)
{
if (z == Zone.ATLANTIQUE)
{
Atla.IsChecked = true;
}
if (z == Zone.ARCTIQUE)
{
Arct.IsChecked = true;
}
if (z == Zone.INDIEN)
{
Indi.IsChecked = true;
}
if (z == Zone.PACIFIQUE)
{
Paci.IsChecked = true;
}
}
}
///
/// Evénement qui permet à l'utilisateur de retourner à la page de description du requin
///
///
///
private void exit_Click(object sender, RoutedEventArgs e)
{
//Change le content control de la main window en UserControlDescription
OnDescWeGo(new DescWeGoEventArgs(requin));
}
///
/// Evénement qui permet de valider les modifications faites à un requin
///
///
///
private void submit_Click(object sender, RoutedEventArgs e)
{
int test = 0;
//Récupère les informations qu'a rentré l'utilisateur
List lesZones = new List();
Conservation cons = new Conservation();
string nom = leNom.LeContenu.Text;
string sciNam = nomSci.LeContenu.Text;
string descri = desc.LeContenu.Text;
string photo = LienPhoto.LeContenu.Text;
string video = LienVid.LeContenu.Text;
string map = LienMap.LeContenu.Text;
string fun = funFact.LeContenu.Text;
//Bouclesqui récupèrent le RadioButton coché et mettent le bon status de conservation dans cons
foreach (Control control in this.radioButtons.Children)
{
if (control is RadioButton radio)
{
if (radio.IsChecked == true) //Test si le RadioButton est coché
{
if (radio.Content is string radString) //Transforme son content en string
{
foreach (Conservation conserv in consList) //Boucles pour tester avec tous les status de conservation
{
if (radString == conserv.ToString())
{
cons = conserv;
test++;
goto loopEnd ; //Sort des boucles
}
}
}
}
}
}
loopEnd:
//Test si la vidéo vient du répertoire Vidéos
if (!video.Contains("Videos/"))
{
MessageBox.Show("Les vidéos doivent venir obligatoirement du répertoire Videos");
return;
}
//Test quels checkBox sont cochées et ajoute dans la liste de zone du requin les zones cochées
if (Arct.IsChecked == true)
{
lesZones.Add(Zone.ARCTIQUE);
}
if (Atla.IsChecked == true)
{
lesZones.Add(Zone.ATLANTIQUE);
}
if (Indi.IsChecked == true)
{
lesZones.Add(Zone.INDIEN);
}
if (Paci.IsChecked == true)
{
lesZones.Add(Zone.PACIFIQUE);
}
//Test si toutes les informations sont bien remplies
if (test == 0 || lesZones.Count()==0 || Mgr.verifierRequin(nom, sciNam, descri, photo, video, map)==false)
{
MessageBox.Show("Veuillez remplir tout les champs obligatoires");
}
//Test si la fun fact et vide
else if (string.IsNullOrWhiteSpace(fun))
{
//Si elle est vide alors utilise le constructeur de requin avec la liste de fun facts
Requin req = new Requin(nom, sciNam, descri, photo, video, map, cons, lesZones, Mgr.FunFacts);
//Test si l'utilisateur est un Expert ou un Utilisateur
if (MgrUser.SelectedUser is Utilisateur user)
{
//Ajoute le requin dans la liste des requins modifiés
user.AjouterRequin(req, Mgr.RequinsEdit);
}
else
{
//Ajoute le requin dans la liste de requin validés
Mgr.ModifieRequin(Mgr.Requins.SingleOrDefault(r => r.Equals(req)), req);
}
//Change le content control de la main window en UserControlDesscription
OnDescWeGo(new DescWeGoEventArgs(requin));
}
else
{
Requin req = new Requin(nom, sciNam, descri, photo, video, map, cons, lesZones, fun);
if (MgrUser.SelectedUser is Utilisateur user)
{
user.AjouterRequin(req, Mgr.RequinsEdit);
}
else
{
Mgr.ModifieRequin(Mgr.Requins.SingleOrDefault(r => r.Equals(req)), req);
}
OnDescWeGo(new DescWeGoEventArgs(requin));
}
}
}
}