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(
                child: const Text('Create trip'),
                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: start,
                        uuid: "pending"
                      )
                    );
                    fetchTrip(trip, preferences);
                    Navigator.of(context).push(
                      MaterialPageRoute(
                        builder: (context) => BasePage(mainScreen: "map", trip: trip)
                      )
                    );
                  }
                },
              ),
            ],
          ),
        )
      )
    );
  }
}