using CvMatcher.Models.Requests;
using CvMatcher.Models.Responses;
namespace Api.Services.Contracts;
///
/// Orchestrates CV indexing, job matching, and job discovery operations.
///
public interface ICvMatcherService
{
///
/// Indexes a CV PDF into the RAG system and returns document metadata.
/// Returns cached metadata without re-indexing when the same text hash already exists.
///
/// Uploaded CV PDF file.
/// Cancellation token.
/// Upload response with document ID, hash, and indexing statistics.
Task UploadCvAsync(IFormFile file, CancellationToken ct);
///
/// Scores a CV against a specific job posting URL or pasted description using the LLM.
/// Caches the result so repeat requests for the same (CV, job, language) triple are served instantly.
///
/// Match request containing CV document ID, job URL or description, and language preference.
/// Cancellation token.
/// Structured match response with score, summary, strengths, gaps, and recommendations.
Task MatchJobAsync(MatchJobRequest request, CancellationToken ct);
///
/// Searches the RAG index for job documents most similar to the given CV and scores the top candidates.
///
/// Request containing the CV document ID and optional result count limit.
/// Cancellation token.
/// Response with the CV document ID and a list of ranked match results.
Task FindJobsAsync(FindJobsRequest request, CancellationToken ct);
}