/*!
 * \file View_DetailAnimal.xmal.cs
 * \author Léana Besson
 */
using Model;

/*!
 * \namespace Views
 */
namespace Views;

/*!
 * \class View-DetailAnimal
 * \brief Regroups functions for View_DetailAnimal page operation
 */
public partial class View_DetailAnimal : ContentView
{
    /*! 
     * \fn View_DetailAnimal()
     * \brief View_DetailAnimal page constructor with component initialization and context binding assignment
     */
    public View_DetailAnimal()
	{
		InitializeComponent();
        Picker_especes.BindingContext = (App.Current as App).Theque;
    }

    /*! 
     * \fn EspeceClic(object sender, EventArgs e)
     * \brief Changes the species of the selected pet and makes the race null 
     * \param sender object - Event emitter information, namely the View_DetailAnimal.xaml page
     * \param e EventArgs - Information related to the clicked button event
     */
    private void EspeceClic(object sender, EventArgs e)
    {
        (App.Current as App).AnimalSelectionner.Espece = (sender as Picker).SelectedItem as Espece;
        (App.Current as App).AnimalSelectionner.Race = null;
    }

    /*! 
     * \fn RaceClic(object sender, EventArgs e)
     * \brief Modifies the breed of the selected pet
     * \param sender object - Event emitter information, namely the View_DetailAnimal.xaml page
     * \param e EventArgs - Information related to the clicked button event
     */
    private void RaceClic(object sender, EventArgs e)
    {
        (App.Current as App).AnimalSelectionner.Race = (sender as Picker).SelectedItem as Race;
    }

    /*! 
     * \fn SexeClick(object sender, EventArgs e)
     * \brief Modifies the gender of the selected pet
     * \param sender object - Event emitter information, namely the View_DetailAnimal.xaml page
     * \param e EventArgs - Information related to the clicked button event
     */
    private void SexeClick(object sender, EventArgs e)
    {
        (App.Current as App).AnimalSelectionner.Sexe = (sender as Picker).SelectedItem as string;
    }

    /*! 
     * \fn TakePhoto(object sender, EventArgs e)
     * \brief Opens photo picker, loads photo into AppDataDirectory file and changes image of selected pet
     * \param sender object - Event emitter information, namely the View_DetailAnimal.xaml page
     * \param e EventArgs - Information related to the clicked button event
     */
    public async void TakePhoto(object sender, EventArgs e)
    {
        if (MediaPicker.Default.IsCaptureSupported)
        {
            FileResult photo = await MediaPicker.Default.PickPhotoAsync();

            if (photo != null)
            {
                string localFilePath = Path.Combine(FileSystem.AppDataDirectory, photo.FileName);

                using Stream sourceStream = await photo.OpenReadAsync();
                using FileStream localFileStream = File.OpenWrite(localFilePath);

                await sourceStream.CopyToAsync(localFileStream);

                (App.Current as App).AnimalSelectionner.Image = Path.Combine(FileSystem.AppDataDirectory, photo.FileName);
            }
        }
    }

}