namespace CvMatcher.Models.Settings; public sealed class JobSearchSettings { public bool Enabled { get; set; } = true; public string JobSearchLinkBaseUrl { get; set; } = string.Empty; public int TokenExpiryDays { get; set; } = 7; public int MinMatchScore { get; set; } = 15; public int MaxJobsToMatch { get; set; } = 15; } /// /// Runtime DTO for a job provider. Populated from cvSearch.JobProviders at session-creation /// time and snapshotted to JobSearchSessionEntity.ProviderConfigJson. /// public sealed class JobProviderConfig { public string Name { get; set; } = string.Empty; public bool Enabled { get; set; } = true; public string SearchUrlTemplate { get; set; } = string.Empty; public string JobLinkContains { get; set; } = string.Empty; public List InitialKeywords { get; set; } = []; public int MaxResults { get; set; } = 20; /// When true the scraper uses a headless Chromium browser to render JS-heavy pages. public bool UseHeadlessBrowser { get; set; } /// /// When false, the Stage 2 anchor-text keyword filter is skipped. /// Set to false for providers whose search URL already filters by relevance server-side. /// public bool RequireKeywordInAnchor { get; set; } = true; }