using JobTrackerApi.Models; namespace JobTrackerApi.Controllers; // DTOs for GmailController, split out for readability (no behaviour change; these were // previously nested inside the controller class). public sealed record GmailImportResultDto(int Imported, int Skipped, string? ThreadId); public sealed record GmailImportMessageResultDto(int Imported, int Skipped, string MessageId, string? ThreadId, Correspondence? Message); public sealed record ImportGmailMessageRequest(int JobApplicationId, string MessageId); public sealed record ImportGmailThreadRequest(int JobApplicationId, string ThreadId, string[] MessageIds); public sealed record RefreshLinkedThreadsRequest(int JobApplicationId); public sealed record GmailThreadRefreshThreadDto(string ThreadId, int Imported, int Skipped, int TotalMessages, string Status, DateTimeOffset? LatestMessageDate); public sealed record GmailThreadRefreshResultDto(int JobApplicationId, int ThreadsChecked, int Imported, int Skipped, bool HasLinkedThreads, DateTimeOffset RefreshedAt, IReadOnlyList Threads); public sealed record GmailJobMatchReasonDto(string Label, string Value, int Points); public sealed record GmailJobMatchedMessageDto( string Id, string ThreadId, string Subject, string From, string To, DateTimeOffset? Date, string Snippet, int Score, string Confidence, bool AlreadyImported, IReadOnlyList MatchedQueries, IReadOnlyList MatchReasons); public sealed record GmailJobMatchedThreadDto( string ThreadId, string Subject, int Score, string Confidence, bool HasImportedMessages, int ImportedMessageCount, int MessageCount, DateTimeOffset? LatestDate, IReadOnlyList MatchedQueries, IReadOnlyList MatchReasons, IReadOnlyList Messages); public sealed record GmailJobMatchesResponseDto( int JobApplicationId, string JobTitle, string CompanyName, string? RecruiterName, string? RecruiterEmail, IReadOnlyList Queries, int CandidateMessageCount, int CandidateThreadCount, IReadOnlyList Threads); public sealed record GmailReviewJobCandidateDto(int JobApplicationId, string JobTitle, string CompanyName, int Score, string Confidence, IReadOnlyList Reasons); public sealed record GmailReviewThreadDto(string ThreadId, string Subject, DateTimeOffset? LatestDate, int MessageCount, string Routing, bool HasImportedMessages, string? DecisionNote, IReadOnlyList MatchedQueries, IReadOnlyList JobCandidates, IReadOnlyList Messages); public sealed record GmailReviewQueueResponseDto(IReadOnlyList Queries, int CandidateThreadCount, int AutoLinkThreadCount, int ReviewThreadCount, int UnmatchedThreadCount, IReadOnlyList Threads); public sealed record SaveGmailReviewDecisionRequest(string ThreadId, string Decision, int? JobApplicationId, string? Note); public sealed record GmailManualSyncRequest(int? LookbackDays, int? MaxResultsPerQuery, bool? AutoImportHighConfidence, bool? IncludeSpamTrash); public sealed record GmailManualSyncResultDto(int QueriesRun, int CandidateThreadCount, int AutoLinkedThreadCount, int ReviewThreadCount, int UnmatchedThreadCount, int ImportedMessages, int ImportedThreads, int SkippedMessages, int LookbackDays, bool IncludeSpamTrash, DateTimeOffset SyncedAt); public sealed record GmailSuggestedJobCandidateDto(string ThreadId, string Subject, DateTimeOffset? LatestDate, string? CompanyName, string? RecruiterName, string? RecruiterEmail, string? SuggestedJobTitle, string Routing, IReadOnlyList MatchedQueries, string Preview); public sealed record GmailSuggestedJobsResponseDto(int Count, IReadOnlyList Items); public sealed record CreateSuggestedGmailJobRequest(string ThreadId, string CompanyName, string JobTitle, string? RecruiterName, string? RecruiterEmail, string? Notes, string? Status); public sealed record CreatedSuggestedGmailJobDto(int JobApplicationId, int CompanyId, string ThreadId, int Imported, int Skipped); public sealed record RelinkGmailThreadRequest(int JobApplicationId, string ThreadId, bool RemoveFromOtherJobs, string? Note); public sealed record GmailRelinkResultDto(string ThreadId, int JobApplicationId, int Imported, int Skipped, int UnlinkedMessages); public sealed record UnlinkGmailThreadRequest(int JobApplicationId, string ThreadId, string? Note, string? NextDecision); public sealed record GmailUnlinkResultDto(string ThreadId, int JobApplicationId, int RemovedMessages, string Decision); public sealed record GmailConnectionStatusDto( bool Connected, string? GmailAddress, DateTimeOffset? ConnectedAt, DateTimeOffset? LastSyncedAt, DateTimeOffset? LastSyncAttemptedAt, DateTimeOffset? LastSyncSucceededAt, string? LastSyncMode, string? LastSyncSource, string? LastSyncStatus, string? LastSyncError);