namespace NewsAnalysis.Services;

public class NewsFetcherBackgroundService : BackgroundService
{
    private readonly IServiceScopeFactory _scopeFactory;
    private readonly ILogger<NewsFetcherBackgroundService> _logger;

    public NewsFetcherBackgroundService(IServiceScopeFactory scopeFactory, ILogger<NewsFetcherBackgroundService> logger)
    {
        _scopeFactory = scopeFactory;
        _logger = logger;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        // İlk çalışmayı 1 saat geciktir
        _logger.LogInformation("Background service başlatıldı. İlk çalışma 1 saat sonra yapılacak.");
        await Task.Delay(TimeSpan.FromHours(1), stoppingToken);

        while (!stoppingToken.IsCancellationRequested)
        {
            try
            {
                using var scope = _scopeFactory.CreateScope();
                var newsService = scope.ServiceProvider.GetRequiredService<INewsService>();
                await newsService.FetchAndSaveNewsAsync();
                _logger.LogInformation("Haberler başarıyla çekildi.");
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Haber çekme sırasında hata oluştu.");
            }

            await Task.Delay(TimeSpan.FromHours(12), stoppingToken);
        }
    }
}
