import 'package:diameter/utils/date_time_utils.dart'; import 'package:flutter/material.dart'; import 'package:parse_server_sdk_flutter/parse_server_sdk.dart'; import 'package:diameter/models/basal_profile.dart'; import 'package:diameter/components/data_table.dart'; class Basal extends DataTableContent { late String? objectId; late DateTime startTime; late DateTime endTime; late double units; late String basalProfile; Basal(ParseObject? object) { if (object != null) { objectId = object.get('objectId'); startTime = object.get('startTime')!; endTime = object.get('endTime')!; units = object.get('units')! / 100; basalProfile = object.get('basalProfile')!.get('objectId')!; } } static Future get(String objectId) async { QueryBuilder query = QueryBuilder(ParseObject('Basal')) ..whereEqualTo('objectId', objectId); final ParseResponse apiResponse = await query.query(); if (apiResponse.success && apiResponse.results != null) { return Basal(apiResponse.result.first); } } static Future> fetchAllForBasalProfile( BasalProfile basalProfile) async { QueryBuilder query = QueryBuilder(ParseObject('Basal')) ..whereEqualTo( 'basalProfile', (ParseObject('BasalProfile')..objectId = basalProfile.objectId!) .toPointer()); final ParseResponse apiResponse = await query.query(); if (apiResponse.success && apiResponse.results != null) { return apiResponse.results!.map((e) => Basal(e as ParseObject)).toList(); } else { return []; } } static Future save({ required DateTime startTime, required DateTime endTime, required double units, required String basalProfile, }) async { final basal = ParseObject('Basal') ..set('startTime', startTime) ..set('endTime', endTime) ..set('units', units * 100) ..set('basalProfile', (ParseObject('BasalProfile')..objectId = basalProfile).toPointer()); await basal.save(); } static Future update( String objectId, { DateTime? startTime, DateTime? endTime, double? units, }) async { var basal = ParseObject('Basal')..objectId = objectId; if (startTime != null) { basal.set('startTime', startTime); } if (endTime != null) { basal.set('endTime', endTime); } if (units != null) { basal.set('units', units * 100); } await basal.save(); } Future delete() async { var basal = ParseObject('Basal')..objectId = objectId; await basal.delete(); } @override List asDataTableCells(List? actions) { return [ DataCell(Text(DateTimeUtils.displayTime(startTime))), DataCell(Text(DateTimeUtils.displayTime(endTime))), DataCell(Text('${units.toString()} U')), DataCell( Row( children: actions ?? [], ), ), ]; } static List asDataTableColumns() { return [ 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('Actions'))), ]; } }