namespace OmsorgCore.Email;

/// <summary>
/// Gebunden an den "Email"-Abschnitt in appsettings.json. Ein gemeinsamer SMTP-Server (<see cref="Smtp"/>),
/// darüber mehrere benannte Accounts (<see cref="Accounts"/>) - z. B. ein dedizierter Account nur für
/// Passwort-Reset-Mails, getrennt von einem künftigen allgemeinen Absender.
/// </summary>
public class EmailOptions
{
    public const string SectionName = "Email";

    /// <summary>"Console" (Default/Dev, schreibt nur ins Log) oder "Smtp" (echter Versand über <see cref="Smtp"/>).</summary>
    public string Provider { get; set; } = "Console";

    public SmtpOptions Smtp { get; set; } = new();

    /// <summary>Benannte Accounts auf dem SMTP-Server, Key = frei wählbarer Name (z. B. "PasswordReset").</summary>
    public Dictionary<string, EmailAccountOptions> Accounts { get; set; } = new();

    /// <summary>Welcher Eintrag aus <see cref="Accounts"/> für Passwort-Reset-Mails verwendet wird.</summary>
    public string PasswordResetAccount { get; set; } = "PasswordReset";

    public PasswordResetEmailTemplate PasswordResetTemplate { get; set; } = new();

    /// <summary>Welcher Eintrag aus <see cref="Accounts"/> für Account-Einladungsmails verwendet wird.</summary>
    public string UserInviteAccount { get; set; } = "UserInvite";

    public UserInviteEmailTemplate UserInviteTemplate { get; set; } = new();

    /// <summary>
    /// Dupliziert bewusst OmsorgCore.Infrastructure.Security.PasswordResetOptions.PinExpiryMinutes -
    /// beide binden an dieselbe "Email"-Sektion, bleiben aber unabhängige Klassen je Schicht
    /// (Engine kennt Infrastructure nicht), analog dem bestehenden Kommentar in PasswordResetOptions.
    /// </summary>
    public int PinExpiryMinutes { get; set; } = 5;
}
