namespace SharepointToolbox.Core.Models;

/// <summary>
/// Discriminated result type for app registration operations.
/// Use the static factory methods to construct instances.
/// </summary>
public class AppRegistrationResult
{
    public bool IsSuccess { get; }
    public bool IsFallback { get; }
    public string? AppId { get; }
    public string? ErrorMessage { get; }

    private AppRegistrationResult(bool isSuccess, bool isFallback, string? appId, string? errorMessage)
    {
        IsSuccess = isSuccess;
        IsFallback = isFallback;
        AppId = appId;
        ErrorMessage = errorMessage;
    }

    /// <summary>Registration succeeded; carries the newly-created appId.</summary>
    public static AppRegistrationResult Success(string appId) =>
        new(isSuccess: true, isFallback: false, appId: appId, errorMessage: null);

    /// <summary>Registration failed; carries an error message.</summary>
    public static AppRegistrationResult Failure(string errorMessage) =>
        new(isSuccess: false, isFallback: false, appId: null, errorMessage: errorMessage);

    /// <summary>User lacks the required permissions — caller should show fallback instructions.</summary>
    public static AppRegistrationResult FallbackRequired() =>
        new(isSuccess: false, isFallback: true, appId: null, errorMessage: null);
}
