import 'dart:collection';

import 'package:fast_network_navigation/structs/landmark.dart';
import 'package:fast_network_navigation/structs/trip.dart';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

class MapWidget extends StatefulWidget {

  final Future<Trip>? trip;

  MapWidget({
    this.trip
  });

  @override
  State<MapWidget> createState() => _MapWidgetState();
}

class _MapWidgetState extends State<MapWidget> {
  late GoogleMapController mapController;
  // coordinates of Paris
  CameraPosition _cameraPosition = CameraPosition(
    target: LatLng(48.8566, 2.3522),
    zoom: 11.0,
  );
  Set<Marker> markers = <Marker>{};
  

  void _onMapCreated(GoogleMapController controller) {
    mapController = controller;
    drawLandmarks();
  }

  
  void _onCameraIdle() {
    // print(mapController.getLatLng(ScreenCoordinate(x: 0, y: 0)));
  }


  void drawLandmarks() async {
    // (re)draws landmarks on the map
    Trip? trip = await widget.trip;
    LinkedList<Landmark> landmarks = trip!.landmarks;
    setState(() {
      for (Landmark landmark in landmarks) {
        markers.add(Marker(
          markerId: MarkerId(landmark.name),
          position: LatLng(landmark.location[0], landmark.location[1]),
          infoWindow: InfoWindow(title: landmark.name, snippet: landmark.type.name),
        ));
      }
    });
  }


  @override
  Widget build(BuildContext context) {
    return GoogleMap(
      onMapCreated: _onMapCreated,
      initialCameraPosition: _cameraPosition,
      onCameraIdle: _onCameraIdle,
      // onLongPress: ,
      markers: markers,
    );
  }
}