using Blazorise;
using FoodsharingSiegen.Contracts.Entity;
using FoodsharingSiegen.Server.BaseClasses;
using FoodsharingSiegen.Server.Data.Service;
using Microsoft.AspNetCore.Components;
namespace FoodsharingSiegen.Server.Dialogs
{
public partial class AddInteractionModal : FsBase
{
#region Dependencies
///
/// Gets or sets the value of the prospect service (ab)
///
[Inject]
public ProspectService ProspectService { get; set; } = null!;
#endregion
#region Parameters
[Parameter]
public string? InfoName { get; set; }
[Parameter]
public Interaction Interaction { get; set; } = new();
[Parameter]
public Func? OnSuccess { get; set; }
[Parameter]
public bool ShowAlert { get; set; }
[Parameter]
public bool ShowInfo { get; set; }
[Parameter]
public bool ShowNotNeeded { get; set; }
#endregion
#region Public Method ShowAsync
///
/// Displays a modal dialog for adding an interaction with configurable settings based on the interaction type and associated prospect ID.
///
///
/// The modal service used to display the modal dialog.
///
///
/// Callback to be invoked upon successful addition of an interaction
///
///
/// The type of interaction to be added.
///
///
/// The unique identifier of the prospect associated with the interaction.
///
///
/// A task representing the asynchronous operation of showing the modal dialog.
///
public static async Task ShowAsync(IModalService modalService, Func onSuccess, InteractionType type, Guid prospectId)
{
var headerText = type switch
{
InteractionType.EinAb => "Einführung eintragen",
InteractionType.Welcome => "Begrüßung eintragen",
InteractionType.IdCheck => "Ausweisprüfung eintragen",
InteractionType.PrintPass => "FS-Ausweis (Print)",
InteractionType.PdfPass => "FS-Ausweis (PDF)",
InteractionType.Verify => "Verifizierung eintragen",
InteractionType.Complete => "Als fertig markieren",
InteractionType.StepInBriefing => $"Neulingstreffen absolviert",
InteractionType.ReleasedForVerification => "Zur Verifizierung freigegeben",
_ => "Neuer Eintrag"
};
var showInfo = type switch
{
InteractionType.EinAb => true,
InteractionType.Complete => true,
InteractionType.IdCheck => true,
InteractionType.PrintPass => true,
InteractionType.PdfPass => true,
InteractionType.ReleasedForVerification => true,
_ => false
};
var infoName = type switch
{
InteractionType.EinAb => "Welcher Betrieb?",
InteractionType.ReleasedForVerification => "Hinweis",
_ => "Kommentar"
};
var showAlert = type switch
{
InteractionType.EinAb => true,
InteractionType.IdCheck => true,
_ => false
};
var showNotNeeded = type switch
{
InteractionType.PrintPass => true,
InteractionType.PdfPass => true,
_ => false
};
var interaction = new Interaction
{
Type = type,
Date = DateTime.UtcNow,
ProspectID = prospectId
};
await modalService.Show(headerText, parameter =>
{
parameter.Add(nameof(Interaction), interaction);
parameter.Add(nameof(ShowInfo), showInfo);
parameter.Add(nameof(InfoName), infoName);
parameter.Add(nameof(ShowAlert), showAlert);
parameter.Add(nameof(ShowNotNeeded), showNotNeeded);
parameter.Add(nameof(OnSuccess), onSuccess);
});
}
#endregion
#region Private Method AddInteractionAsync
///
/// Adds a new interaction for the current user using the ProspectService and hides the modal.
///
///
/// A task representing the asynchronous operation.
///
private async Task AddInteractionAsync()
{
Interaction.UserID = CurrentUser.Id;
var addR = await ProspectService.AddInteraction(Interaction);
if (addR.Success && OnSuccess != null) await OnSuccess.Invoke();
await ModalService.Hide();
}
#endregion
}
}