namespace CvSearch.Data.Entities;

/// <summary>
/// Persisted job-board provider configuration. Stored in <c>cvSearch.JobProviders</c>.
/// Providers are loaded from here at session-creation time and snapshotted into
/// <c>JobSearchSessionEntity.ProviderConfigJson</c> so runtime config changes do not
/// affect already-queued sessions.
/// </summary>
public sealed class JobProviderEntity
{
    public int Id { get; set; }

    /// <summary>Display name (e.g. "ejobs.ro").</summary>
    public string Name { get; set; } = string.Empty;

    /// <summary>When false the provider is skipped at session-creation and the job-search link is hidden.</summary>
    public bool Enabled { get; set; }

    /// <summary>URL template with <c>{keywords}</c> placeholder (URL-encoded keywords are substituted at runtime).</summary>
    public string SearchUrlTemplate { get; set; } = string.Empty;

    /// <summary>Substring that must appear in an anchor href to pass the stage-1 link filter.</summary>
    public string JobLinkContains { get; set; } = string.Empty;

    /// <summary>JSON array of baseline keywords merged with CV keywords before building the search URL.</summary>
    public string InitialKeywordsJson { get; set; } = "[]";

    /// <summary>Maximum number of job URLs to collect from this provider per session.</summary>
    public int MaxResults { get; set; } = 20;

    /// <summary>Controls display ordering in future admin UIs.</summary>
    public int DisplayOrder { get; set; }

    /// <summary>
    /// 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 (ejobs.ro, bestjobs.eu).
    /// </summary>
    public bool RequireKeywordInAnchor { get; set; } = true;
}
