using CanYouBuildIt.Model;
using System.Diagnostics;

namespace CanYouBuildIt.Views;

public partial class Acceuil : ContentPage
{
    public Manager manager => (App.Current as App).manager;     //Permet d'acceder à toutes les valeurs sauvegarder de l'app
    bool connecte = false;                                      //Permet de vérifier si un utilisateur est connecter (pour par exemple acceder à ses favoris
    int user;                                                   //Adresse de l'utilisateur connecter dans la liste d'utilisateur du manager

    //Constructeur par default utiliser lors de l'ouverture de l'app
    public Acceuil()
    {
        InitializeComponent();
        BindingContext = manager;
        showGrid();
    }

    //Constructeur utiliser lors de la connexion d'un utilisateur.
    public Acceuil(int iduser)
    {
        InitializeComponent();
        BindingContext = manager;
        connecte = true;
        user = iduser;
        string userN = manager.listUtil[user].username;
        Log.Text = userN;
        showGrid();

    }

    //Ancien test
    /*public void AddUtilisater(object sender, EventArgs e)
	{
		Utilisateur utilisateur = new Utilisateur("Util1","pdm1");
		Debug.WriteLine("Utilisateur créé");
	}*/

    //Vérifie si l'utilisateur et connecter puis empile la fenetre des favoris de l'utilisateur
    public async void NavFav(object sender, EventArgs e)
    {
        if (connecte)
            await Navigation.PushAsync(new Favoris(user));
        else
        {
            aConnecter.IsVisible = true;
            await Task.Delay(3000);
            aConnecter.IsVisible = false;
        }
    }

    //Empile la fenetre des credits
    public async void NavCreds(object sender, EventArgs e)
    {
        await Navigation.PushAsync(new Credits());
    }

    //Empile la fenetre de connexion
    public async void NavLogin(object sender, EventArgs e)
    {
        await Navigation.PushAsync(new Login());
    }

    //Empile la fenetre d'un pc
    public async void NavOrdi(object sender, EventArgs e)
    {
        // Récupérer l'ImageButton qui a déclenché l'événement
        ImageButton imageButton = (ImageButton)sender;

        // Récupérer l'objet Build associé à l'image cliquée
        Build build = (Build)imageButton.BindingContext;

        // Accéder à la propriété id de l'objet Build
        int id = build.id;
        if (connecte)
            await Navigation.PushAsync(new Ordinateur(id,user));
        else
            await Navigation.PushAsync(new Ordinateur(id));
    }

    //Ferme l'application
    public void ToQuit(object sender, EventArgs e)
    {
        App.Current.Quit();
    }

    //Permet d'afficher les pc selon leur nombre dans la grid de ma page d'accueil
    public void showGrid()
    {
        int row = 0;
        for (int i = 0; i < 7 && i < manager.listBuild.Count(); ++i)
        {
            if (i % 2 == 0)
                row = 0;
            else
                row = 1;

            ImageButton imagebtn = new ImageButton()
            {
                Source = manager.listBuild[i].image,
                BackgroundColor = Color.FromHex("#119FA8"),
                BindingContext = manager.listBuild[i],
                CornerRadius = 10,
                HeightRequest = 200,
                Margin = new Thickness(1.5,0,1.5,0)
            };
            imagebtn.Clicked += NavOrdi;

            //Défini la case de la grille ou sera l'image
            Grid.SetRow(imagebtn, row);
            Grid.SetColumn(imagebtn, i);
            //Met l'image dans la grille
            gridacc.Children.Add(imagebtn);

        }
    }

}