using Insight.Infrastructure;
using Insight.Infrastructure.Entities;
using Insight.Web.Constants;
using Microsoft.AspNetCore.Components;
using MongoDB.Driver;
using MudBlazor;

namespace Insight.Web.Pages.Management.Customers
{
    public partial class CustomerEditDialog
    {
        [CascadingParameter(Name = "Customer")] public CustomerEntity? Customer { get; set; }
        [Parameter] public EventCallback OnChanges { get; set; }

        [Inject] private IMongoDatabase Database { get; init; } = default!;
        [Inject] private ISnackbar Snackbar { get; init; } = default!;
        [Inject] private ILogger<CustomerEditDialog> Logger { get; init; } = default!;

        private async Task SubmitAsync()
        {
            if (Customer is null) return;
            Customer.Update = DateTime.Now;

            try
            {
                await Database.Customer()
                    .UpdateOneAsync(Builders<CustomerEntity>
                    .Filter
                    .Eq(p => p.Id, Customer.Id), Builders<CustomerEntity>
                    .Update
                    .Set(p => p.Update, DateTime.Now)
                    .Set(p => p.Name, Customer.Name)
                    .Set(p => p.Tag, Customer.Tag), default).ConfigureAwait(false);

                Notification.Success(Snackbar);

                if (OnChanges.HasDelegate)
                {
                    await InvokeAsync(async () =>
                    {
                        await OnChanges.InvokeAsync(this);
                    });
                }
            }
            catch (Exception ex)
            {
                Notification.Error(Snackbar);
                Logger.LogError(ex.ToString());
            }
            finally
            {
                _visible = false;
            }
        }
    }
}