// import 'package:diameter/config.dart'; // import 'package:diameter/settings.dart'; // import 'package:diameter/utils/date_time_utils.dart'; import 'package:diameter/utils/utils.dart'; // import 'package:flutter/material.dart'; import 'package:parse_server_sdk_flutter/parse_server_sdk.dart'; import 'package:diameter/components/data_table.dart'; import 'package:diameter/models/bolus_profile.dart'; class Bolus extends DataTableContent { late String? objectId; late DateTime startTime; late DateTime endTime; late double units; late double carbs; late int? mgPerDl; late double? mmolPerL; late String bolusProfile; Bolus(ParseObject? object) { if (object != null) { objectId = object.get('objectId'); startTime = object.get('startTime')!.toLocal(); endTime = object.get('endTime')!.toLocal(); units = object.get('units')! / 100; carbs = object.get('carbs')!.toDouble(); mgPerDl = object.get('mgPerDl') != null ? object.get('mgPerDl')!.toInt() : null; mmolPerL = object.get('mmolPerL') != null ? object.get('mmolPerL')! / 100 : null; bolusProfile = object.get('bolusProfile')!.get('objectId')!; } } static Future get(String objectId) async { QueryBuilder query = QueryBuilder(ParseObject('Bolus')) ..whereEqualTo('objectId', objectId); final ParseResponse apiResponse = await query.query(); if (apiResponse.success && apiResponse.results != null) { return Bolus(apiResponse.result.first); } } static Future> fetchAllForBolusProfile( BolusProfile bolusProfile) async { QueryBuilder query = QueryBuilder(ParseObject('Bolus')) ..whereEqualTo( 'bolusProfile', (ParseObject('BolusProfile')..objectId = bolusProfile.objectId!) .toPointer()) ..orderByAscending('startTime'); final ParseResponse apiResponse = await query.query(); if (apiResponse.success && apiResponse.results != null) { return apiResponse.results!.map((e) => Bolus(e as ParseObject)).toList(); } else { return []; } } static Future save({ required DateTime startTime, required DateTime endTime, required double units, required double carbs, int? mgPerDl, double? mmolPerL, required String bolusProfile, }) async { final bolus = ParseObject('Bolus') ..set('startTime', startTime.toUtc()) ..set('endTime', endTime.toUtc()) ..set('units', units * 100) ..set('carbs', carbs.round()) ..set('bolusProfile', (ParseObject('BolusProfile')..objectId = bolusProfile).toPointer()); bolus.set( 'mgPerDl', mgPerDl != null ? mgPerDl.round() : Utils.convertMmolPerLToMgPerDl(mmolPerL ?? 0)); bolus.set( 'mmolPerL', mmolPerL != null ? mmolPerL * 100 : Utils.convertMgPerDlToMmolPerL(mgPerDl ?? 0) * 100); await bolus.save(); } static Future update( String objectId, { DateTime? startTime, DateTime? endTime, double? units, double? carbs, int? mgPerDl, double? mmolPerL, }) async { var bolus = ParseObject('Bolus')..objectId = objectId; if (startTime != null) { bolus.set('startTime', startTime.toUtc()); } if (endTime != null) { bolus.set('endTime', endTime.toUtc()); } if (units != null) { bolus.set('units', units * 100); } if (carbs != null) { bolus.set('carbs', carbs); } if (mgPerDl != null || mmolPerL != null) { bolus.set( 'mgPerDl', mgPerDl != null ? mgPerDl.round() : Utils.convertMmolPerLToMgPerDl(mmolPerL ?? 0)); bolus.set( 'mmolPerL', mmolPerL != null ? mmolPerL * 100 : Utils.convertMgPerDlToMmolPerL(mgPerDl ?? 0) * 100); } await bolus.save(); } Future delete() async { var bolus = ParseObject('Bolus')..objectId = objectId; await bolus.delete(); } // // @override // List asDataTableCells(List? actions) { // var cols = [ // DataCell(Text(DateTimeUtils.displayTime(startTime))), // DataCell(Text(DateTimeUtils.displayTime(endTime))), // DataCell(Text('${units.toString()} U')), // DataCell(Text('${carbs.toString()} g')), // ]; // // if (glucoseMeasurement == GlucoseMeasurement.mgPerDl || // glucoseDisplayMode == GlucoseDisplayMode.both || // glucoseDisplayMode == GlucoseDisplayMode.bothForList) { // cols.add(DataCell(Text('${mgPerDl.toString()} mg/dl'))); // } // // if (glucoseMeasurement == GlucoseMeasurement.mmolPerL || // glucoseDisplayMode == GlucoseDisplayMode.both || // glucoseDisplayMode == GlucoseDisplayMode.bothForList) { // cols.add(DataCell(Text('${mmolPerL.toString()} mmol/l'))); // } // // cols.add( // DataCell( // Row( // children: actions ?? [], // ), // ), // ); // // return cols; // } // // static List asDataTableColumns() { // var cols = [ // const DataColumn(label: Expanded(child: Text('Start Time'))), // const DataColumn(label: Expanded(child: Text('End Time'))), // const DataColumn(label: Expanded(child: Text('Units'))), // const DataColumn(label: Expanded(child: Text('per Carbs'))), // ]; // // if (glucoseMeasurement == GlucoseMeasurement.mgPerDl || // glucoseDisplayMode == GlucoseDisplayMode.both || // glucoseDisplayMode == GlucoseDisplayMode.bothForList) { // cols.add(const DataColumn(label: Expanded(child: Text('per mg/dl')))); // } // // if (glucoseMeasurement == GlucoseMeasurement.mmolPerL || // glucoseDisplayMode == GlucoseDisplayMode.both || // glucoseDisplayMode == GlucoseDisplayMode.bothForList) { // cols.add(const DataColumn(label: Expanded(child: Text('per mmol/l')))); // } // // cols.add( // const DataColumn(label: Expanded(child: Text('Actions'))), // ); // // return cols; // } }