using adas_core.Domain.Models;
using adas_core.Domain.Models.MongoModels;
using adas_core.Domain.Models.Pumps;
namespace adas_core.Application.Services.Interfaces;
public interface IConfigPumpsService
{
///
/// Asynchronously maps the source PumpObservation to a new PumpObservation instance, transforming its data into the target representation.
///
/// The source PumpObservation to be mapped.
/// A task that represents the asynchronous mapping operation, containing the resulting PumpObservation.
Task Map(PumpObservation obs);
///
/// Retrieves all available pump configurations from the configuration store.
///
/// A task containing a list of with all pump configurations, or null if no configurations are available.
Task?> GetAllPumpConfigs();
///
/// Asynchronously retrieves the configuration pump items associated with the specified identifier.
/// Returns null if no configuration items are found for the given id.
///
/// The unique identifier used to look up the configuration items.
/// A task containing a list of ConfigPumpItem objects if found, or null if no items exist for the specified id.
Task?> GetConfigItems(string id);
///
/// Asynchronously retrieves the pump configuration that matches the specified identifier.
///
/// The unique identifier of the pump configuration to look up.
/// A task that represents the asynchronous operation. The task result contains the matching configuration if found; otherwise, null when no configuration exists for the given identifier.
Task GetPumpConfigById(string id);
///
/// Updates the pump configuration asynchronously and returns the updated configuration.
///
/// The pump configuration to update.
/// A task that represents the asynchronous operation, containing the updated , or null if the configuration was not found.
Task UpdatePumpConfig(ConfigPumps pumpConfig);
///
/// Inserts a new pump configuration into the data store.
///
/// The pump configuration to insert.
/// The inserted entity, or null if the insertion was not performed.
Task InsertPumpConfig(ConfigPumps pumpConfig);
///
/// Asynchronously deletes the specified pump configuration.
///
/// The pump configuration to delete.
/// A task that represents the asynchronous operation. The task result contains a boolean indicating whether the deletion was successful.
Task DeletePumpConfig(ConfigPumps config);
///
/// Asynchronously evaluates and applies retention actions for a pump observation, returning the resulting retention outcome.
///
/// The pump observation to process for retention actions.
/// A task that represents the asynchronous operation, containing the retention result, or null if no retention action applies.
Task RetentionActions(PumpObservation obs);
}