using System.Net.NetworkInformation;

namespace Watcher.Services;
public class NetworkCheck : BackgroundService
{
    private readonly ILogger<NetworkCheck> _logger;

    private IDashboardStore _dashboardStore;

    public NetworkCheck(ILogger<NetworkCheck> logger, IDashboardStore dashboardStore)
    {
        _logger = logger;
        _dashboardStore = dashboardStore;

    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        var timer = new PeriodicTimer(TimeSpan.FromSeconds(30));

        while (await timer.WaitForNextTickAsync(stoppingToken))
        {
            // Hintergrundprozess abwarten
            await CheckConnectionAsync();

            // 5 Sekdunden Offset
            await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken);
        }
    }

    public Task CheckConnectionAsync()
    {
        _logger.LogInformation("Networkcheck started.");

        string host = "8.8.8.8";
        Ping p = new Ping();

        try
        {
            PingReply reply = p.Send(host, 3000);
            if (reply.Status == IPStatus.Success)
            {
                _dashboardStore.NetworkStatus = "online";
                _logger.LogInformation("Ping successfull. Watcher is online.");
            }
        }
        catch
        {
            _dashboardStore.NetworkStatus = "offline";
            _logger.LogError("Ping failed. Watcher appears to have no network connection.");

            // LogEvent erstellen
        }

        _logger.LogInformation("Networkcheck finished.");

        return Task.CompletedTask;
    }
}