using JobsMedical.Web.Models;

namespace JobsMedical.Web.Services.Scraping;

/// <summary>One raw post pulled from a source (a Telegram message, a Divar ad, etc.).</summary>
public record ScrapedItem(string Source, string RawText, string? SourceUrl = null);

/// <summary>
/// A pluggable source the ingestion engine pulls from. Configuration (enabled, channels, tokens)
/// comes from the DB-backed <see cref="AppSetting"/> passed in — set in the admin panel, not env.
/// A disabled/unconfigured source returns an empty list.
/// </summary>
public interface IListingSource
{
    string Name { get; }
    Task<IReadOnlyList<ScrapedItem>> FetchAsync(AppSetting settings, CancellationToken ct = default);
}
