import 'package:anyway/structs/landmark.dart';
import 'package:flutter/material.dart';
import 'package:geocoding/geocoding.dart';

import 'package:anyway/layout.dart';
import 'package:anyway/utils/fetch_trip.dart';
import 'package:anyway/structs/preferences.dart';
import "package:anyway/structs/trip.dart";



class NewTripPage extends StatefulWidget {
  const NewTripPage({Key? key}) : super(key: key);

  @override
  _NewTripPageState createState() => _NewTripPageState();
}

class _NewTripPageState extends State<NewTripPage> {
  final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
  final TextEditingController latController = TextEditingController();
  final TextEditingController lonController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('New Trip'),
      ),
      body: Form(
        key: _formKey,
        child: 
          Padding(
            padding: const EdgeInsets.all(15.0),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              
              children: <Widget>[
                TextFormField(
                  decoration: const InputDecoration(hintText: 'Lat'),
                  controller: latController,
                  validator: (String? value) {
                    if (value == null || value.isEmpty || double.tryParse(value) == null){
                      return 'Please enter a floating point number';
                    }
                    return null;
                  },
                ),
                TextFormField(
                  decoration: const InputDecoration(hintText: 'Lon'),
                  controller: lonController,

                  validator: (String? value) {
                    if (value == null || value.isEmpty || double.tryParse(value) == null){
                      return 'Please enter a floating point number';
                    }
                    return null;
                  },
                ),
                Divider(height: 15, color: Colors.transparent),
                ElevatedButton(
                  onPressed: () {
                    if (_formKey.currentState!.validate()) {
                      List<double> startPoint = [
                        double.parse(latController.text),
                        double.parse(lonController.text)
                      ];
                      Future<UserPreferences> preferences = loadUserPreferences();
                      Trip trip = Trip();
                      trip.landmarks.add(
                        Landmark(
                          location: startPoint,
                          name: "start",
                          type: LandmarkType(name: 'start'),
                          uuid: "pending"
                        )
                      );
                      fetchTrip(trip, preferences);
                        Navigator.of(context).push(
                          MaterialPageRoute(
                            builder: (context) => BasePage(mainScreen: "map", trip: trip)
                          )
                        );
                    }
                  },
                  child: const Text('Create trip'),
                ),
              ],
            ),
          )
        
      )
    );
  }
}