using adas_core.Application.Subscriptions;
using adas_core.Domain.Models;
using adas_core.Domain.Models.GroupedObservations;
using MongoDB.Bson;

namespace adas_core.Application.Services.Interfaces;

public interface IGroupedObservationService
{
    Task<GroupedObservation> GenerateGroupedObservation(ObjectId id, GroupedField groupedField,
        string timeZoneId = "Romance Standard Time", bool cacheIsChecked = false, CancellationToken ct = default);

    Task<GroupedObservation> GenerateGroupedObservation(ObjectId obsPatientId, GroupedField groupedField,
        List<GroupedObservation.GroupedObservationObs> wsgLastGroupedObservationObs, PatientObservation obs,
        string timeZoneId = "Romance Standard Time");

    Task<List<PatientObservation>> FindLastObservations(ObjectId patientId, int num = 2,
        List<string>? filterObservations = null);

    Task<GroupedObservation> CreateNextEmptyObs(WsSubscriberGrouped ws);
    /*
     *
    List<BsonDocument> CalculateShiftObservations(List<BsonDocument> shiftGroupObservations, GroupedField groupedField);
    List<BsonDocument> GenerateShiftObservations(List<BsonDocument> result, GroupedField groupedField);
     */
}