using AIStudio.Tools.Rust;
namespace AIStudio.Tools.Media;
///
/// Typed terminal result returned by media import and voice operations.
///
/// Terminal operation status.
/// Transcript text for a successful operation.
/// Localized message suitable for display after a warning or failure.
/// Optional stable runtime failure category.
/// Whether the transcription provider refused the media file itself, so that it would refuse the unchanged file again.
public sealed record MediaTranscriptionResult(MediaTranscriptionResultStatus Status, string Text, string UserMessage, MediaJobErrorCode? ErrorCode = null, bool FileRejected = false)
{
/// Creates a successful result.
/// Provider transcript.
public static MediaTranscriptionResult Succeeded(string text) => new(MediaTranscriptionResultStatus.SUCCEEDED, text, string.Empty);
/// Creates a failed result.
/// Localized visible message.
/// Optional runtime error category.
public static MediaTranscriptionResult Failed(string userMessage, MediaJobErrorCode? errorCode = null) => new(MediaTranscriptionResultStatus.FAILED, string.Empty, userMessage, errorCode);
/// Creates a failed result for a media file which the transcription provider refused.
/// Localized visible message.
public static MediaTranscriptionResult Rejected(string userMessage) => new(MediaTranscriptionResultStatus.FAILED, string.Empty, userMessage, FileRejected: true);
/// Creates a warning result for media without an audible signal.
/// Localized visible warning.
public static MediaTranscriptionResult NoAudibleSignal(string userMessage) => new(
MediaTranscriptionResultStatus.NO_AUDIBLE_SIGNAL,
string.Empty,
userMessage);
/// Creates a cancelled result without relying on visible text.
public static MediaTranscriptionResult Cancelled() => new(MediaTranscriptionResultStatus.CANCELLED, string.Empty, string.Empty, MediaJobErrorCode.CANCELLED);
}