using System;
using SharedLibraryCore;
using SharedLibraryCore.Alerts;
using SharedLibraryCore.Database.Models;

namespace IW4MAdmin.Application.Alerts;

public static class AlertExtensions
{
    public static Alert.AlertState BuildAlert(this EFClient client, Alert.AlertCategory? type = null)
    {
        return new Alert.AlertState
        {
            RecipientId = client.ClientId,
            Category = type ?? Alert.AlertCategory.Information
        };
    }

    public static Alert.AlertState WithCategory(this Alert.AlertState state, Alert.AlertCategory category)
    {
        state.Category = category;
        return state;
    }

    public static Alert.AlertState OfType(this Alert.AlertState state, string type)
    {
        state.Type = type;
        return state;
    }

    public static Alert.AlertState WithMessage(this Alert.AlertState state, string message)
    {
        state.Message = message;
        return state;
    }

    public static Alert.AlertState ExpiresIn(this Alert.AlertState state, TimeSpan expiration)
    {
        state.ExpiresAt = DateTime.Now.Add(expiration);
        return state;
    }
    
    public static Alert.AlertState FromSource(this Alert.AlertState state, string source)
    {
        state.Source = source;
        return state;
    }

    public static Alert.AlertState FromClient(this Alert.AlertState state, EFClient client)
    {
        state.Source = client.Name.StripColors();
        state.SourceId = client.ClientId;
        return state;
    }
}