From 79ff9e29e763bbc518cec801369955672f8640e1 Mon Sep 17 00:00:00 2001
From: theilen <dominik.theilen@gmx.de>
Date: Thu, 30 Mar 2023 18:38:25 +0200
Subject: [PATCH] Include day and weather information

---
 lib/main.dart | 56 ++++++++++++++++++++++++++++++++++-----------------
 1 file changed, 37 insertions(+), 19 deletions(-)

diff --git a/lib/main.dart b/lib/main.dart
index 9aad9b7..1805cb4 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -2,6 +2,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_map/flutter_map.dart';
 import 'package:intl/intl.dart';
+import 'package:tuple/tuple.dart';
 import 'widgets/returnOrigin.dart';
 import 'widgets/returnDestination.dart';
 import 'package:geocoding/geocoding.dart';
@@ -212,28 +213,19 @@ class _MyHomePageState extends State<MyHomePage> {
       var originlon = _originCoordinates.longitude;
       var destlat = _destCoordinates.latitude;
       var destlon = _destCoordinates.longitude;
+      var dateTup = getDayOffset();
 
       // Get direction data
       // No weather or days included for now
-      final response = await http.post(
-        Uri.parse('http://10.0.2.2:8080/route'),
-        body: jsonEncode(
-          {   
-            "start_node": {
-              "lat": originlat, 
-              "lon": originlon
-            }, 
-            "end_node": {
-              "lat": destlat, 
-              "lon": destlon
-            }, 
-            "forbidden": [], 
-            "start_after_today": 0, 
-            "end_after_today": 0
-          }
-        ),
-        headers: <String, String>{"Content-Type": "application/json"}
-      );
+      final response = await http.post(Uri.parse('http://10.0.2.2:8080/route'),
+          body: jsonEncode({
+            "start_node": {"lat": originlat, "lon": originlon},
+            "end_node": {"lat": destlat, "lon": destlon},
+            "forbidden": getForbidden(),
+            "start_after_today": dateTup.item1,
+            "end_after_today": dateTup.item2
+          }),
+          headers: <String, String>{"Content-Type": "application/json"});
       _data = jsonDecode(response.body);
       var coordinates = _data['route'];
       int duration = _data['duration'];
@@ -293,6 +285,32 @@ class _MyHomePageState extends State<MyHomePage> {
     return '$distanceInKm km';
   }
 
+  List<String> getForbidden() {
+    List<String> forbidden = [];
+    for (var option in _selectedOptions) {
+      switch (option) {
+        case 'Rain':
+          forbidden.add('rain');
+          break;
+        case 'Frost':
+          forbidden.add('ice');
+          break;
+        case 'Wind':
+          forbidden.add('wind');
+          break;
+        case 'Snow':
+          forbidden.add('snow');
+      }
+    }
+
+    return forbidden;
+  }
+
+  Tuple2<int, int> getDayOffset() {
+    return Tuple2<int, int>(_dateRange.start.difference(DateTime.now()).inDays,
+        _dateRange.end.difference(DateTime.now()).inDays);
+  }
+
   // Get coords between origin/dest points corresponding to shortest path and update _info.
   // This part is going to be updated to take directions from backend instead of Direction API.
   // Future<Directions> _getDirections() async {
-- 
GitLab