namespace VideoStudy.Shared; /// /// Request model for video analysis /// public class AnalysisRequest { public string VideoUrl { get; set; } = string.Empty; public string Language { get; set; } = "en"; // Input language (subtitles) public string? OutputLanguage { get; set; } // Output language (tutorial). null = same as Language public string Mode { get; set; } = "fast"; // fast or advanced public string? TranscriptText { get; set; } // Optional: if client already transcribed it public double DurationSeconds { get; set; } } /// /// Response model containing analysis results /// public class AnalysisResponse { public string VideoTitle { get; set; } = string.Empty; public string DocumentTitle { get; set; } = string.Empty; // New public string Summary { get; set; } = string.Empty; // Renamed from ExecutiveSummary public string Category { get; set; } = "OTHER"; // New public string Transcript { get; set; } = string.Empty; public List KeyMoments { get; set; } = []; public string Analysis { get; set; } = string.Empty; public List TutorialSections { get; set; } = []; public List DebugSteps { get; set; } = []; public string? RawLlmResponse { get; set; } public byte[]? PdfData { get; set; } public string Status { get; set; } = "success"; public string? ErrorMessage { get; set; } } public class TutorialSection { public string Title { get; set; } = string.Empty; public string Content { get; set; } = string.Empty; public string? ImageTimestamp { get; set; } // "HH:MM:SS" public int? ImageTimeSeconds { get; set; } public byte[]? ImageData { get; set; } // For internal use during PDF generation } /// /// Represents a key moment in the video /// public class KeyMoment { public string Timestamp { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; public int StartSeconds { get; set; } public string Explanation { get; set; } = string.Empty; } /// /// Progress update for long-running operations /// public class ProgressUpdate { public double PercentComplete { get; set; } public string Message { get; set; } = string.Empty; public string Stage { get; set; } = string.Empty; } public class VideoInfo { public string Title { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; // Added public TimeSpan Duration { get; set; } public string Url { get; set; } = string.Empty; public string ThumbnailUrl { get; set; } = string.Empty; public string Author { get; set; } = string.Empty; } public class Transcription { public string FullText { get; set; } = string.Empty; public List Segments { get; set; } = []; public string Language { get; set; } = "en"; } public class TranscriptionSegment { public string Timestamp { get; set; } = string.Empty; public string Text { get; set; } = string.Empty; public double StartSeconds { get; set; } public double EndSeconds { get; set; } } public class ProcessingResult { public Transcription Transcription { get; set; } = new(); public List KeyMoments { get; set; } = []; public List ScreenshotPaths { get; set; } = []; } public class DownloadProgress { public double PercentComplete { get; set; } public string Status { get; set; } = string.Empty; } public interface IPdfSaver { Task SavePdfAsync(byte[] pdfData, string suggestedFileName); } /// /// A single event in the analysis stream. /// public class AnalysisEvent { /// /// A user-facing message describing the current step. /// public string Message { get; set; } = string.Empty; /// /// Progress from 0 to 100. /// public int ProgressPercentage { get; set; } /// /// The final result of the analysis. Only present in the last event. /// public AnalysisResult? Result { get; set; } /// /// Set to true if this event represents a critical error that stopped the process. /// public bool IsError { get; set; } = false; } /// /// The final, consolidated result of a successful analysis. /// public class AnalysisResult { public string VideoTitle { get; set; } = string.Empty; public string DocumentTitle { get; set; } = string.Empty; public string Summary { get; set; } = string.Empty; // Renamed from ExecutiveSummary public string Category { get; set; } = "OTHER"; public string Transcript { get; set; } = string.Empty; public List TutorialSections { get; set; } = []; public byte[]? PdfData { get; set; } public string? RawLlmResponse { get; set; } } /// /// Representa uma sessão de estudo gravada no banco de dados local. /// public class VideoStudySession { public int Id { get; set; } public string YouTubeId { get; set; } = string.Empty; public string Title { get; set; } = string.Empty; public string FilePath { get; set; } = string.Empty; public string FolderName { get; set; } = "Geral"; public DateTime CreatedAt { get; set; } = DateTime.Now; }