using MauiAppStock.Models;
using MauiAppStock.Data;

namespace MauiAppStock.Views
{
    public partial class EditPiecePage : ContentPage
    {
        private Piece _piece;
        private List<Fournisseur> _fournisseurs;

        public EditPiecePage(Piece piece)
        {
            InitializeComponent();
            _piece = piece;

            // Remplir les champs de base
            NomEntry.Text = piece.Nom;
            DescriptionEditor.Text = piece.Description;
            PrixEntry.Text = piece.Prix.ToString();
            StockEntry.Text = piece.Stock.ToString();
        }

        protected override async void OnAppearing()
        {
            base.OnAppearing();

            // Charger les fournisseurs
            _fournisseurs = await Database.GetFournisseursAsync();

            FournisseurPicker.ItemsSource = _fournisseurs;
            FournisseurPicker.ItemDisplayBinding = new Binding("Nom");

            // Sélectionner le fournisseur existant (si défini)
            if (!string.IsNullOrEmpty(_piece.Fournisseur))
            {
                var fournisseurActuel = _fournisseurs.FirstOrDefault(f => f.Nom == _piece.Fournisseur);
                if (fournisseurActuel != null)
                {
                    FournisseurPicker.SelectedItem = fournisseurActuel;
                }
            }
        }

        private async void OnSaveClicked(object sender, EventArgs e)
        {
            if (double.TryParse(PrixEntry.Text, out double prix) && int.TryParse(StockEntry.Text, out int stock))
            {
                _piece.Nom = NomEntry.Text;
                _piece.Description = DescriptionEditor.Text;
                _piece.Prix = prix;
                _piece.Stock = stock;

                var fournisseurSelectionne = FournisseurPicker.SelectedItem as Fournisseur;
                _piece.Fournisseur = fournisseurSelectionne?.Nom;

                await Database.UpdatePieceAsync(_piece);
                await Navigation.PopAsync();
            }
            else
            {
                await DisplayAlert("Erreur", "Veuillez vérifier les valeurs du prix et du stock.", "OK");
            }
        }

        private async void OnDeleteClicked(object sender, EventArgs e)
        {
            bool confirm = await DisplayAlert("Confirmation", "Voulez-vous vraiment supprimer cette pièce ?", "Oui", "Non");
            if (confirm)
            {
                await Database.DeletePieceAsync(_piece);
                await Navigation.PopAsync();
            }
        }
    }
}
