import 'package:flutter/material.dart';

import 'package:anyway/constants.dart';

import 'package:anyway/main.dart';
import 'package:anyway/modules/help_dialog.dart';
import 'package:anyway/modules/trips_saved_list.dart';

import 'package:anyway/pages/onboarding.dart';
import 'package:anyway/pages/current_trip.dart';
import 'package:anyway/pages/settings.dart';
import 'package:anyway/pages/new_trip_location.dart';


mixin ScaffoldLayout<T extends StatefulWidget> on State<T> {
  Widget mainScaffold(
    BuildContext context,
    {
      Widget child = const Text("emptiness"),
      Widget title = const Text(APP_NAME),
      List<String> helpTexts = const []
    }
  ) {
    return Scaffold(
      appBar: AppBar(
        title: title,
        actions: [
          IconButton(
            icon: const Icon(Icons.help),
            tooltip: 'Help',
            onPressed: () {
              if (helpTexts.isNotEmpty) {
                helpDialog(context, helpTexts[0], helpTexts[1]);
              }
            }
          ),
        ],
      ),
      body: Center(child: child),
      drawer: Drawer(
        child: Column(
          children: [
            Container(
              decoration: const BoxDecoration(
                gradient: APP_GRADIENT,
              ),
              height: 150,
              child: const Center(
                child: Text(
                  APP_NAME,
                  style: TextStyle(
                    color: Colors.white,
                    fontSize: 24,
                    fontWeight: FontWeight.bold,
                  ),
                ),
              ),
            ),

            ListTile(
              title: const Text('Your Trips'),
              leading: const Icon(Icons.map),
              selected: widget is TripPage,
              onTap: () {},
              trailing: ElevatedButton(
                onPressed: () {
                  Navigator.of(context).push(
                    MaterialPageRoute(
                      builder: (context) => const NewTripPage()
                    )
                  );
                },
                child: const Text('New'),
              ),
            ),

            // Adds a ListView to the drawer. This ensures the user can scroll
            // through the options in the drawer if there isn't enough vertical
            // space to fit everything.
            Expanded(
              child: TripsOverview(trips: savedTrips),
            ),
            ElevatedButton(
              onPressed: () async {
                savedTrips.clearTrips();
              },
              child: const Text('Clear trips'),
            ),
            const Divider(indent: 10, endIndent: 10),
            ListTile(
              title: const Text('How to use'),
              leading: const Icon(Icons.help),
              selected: widget is OnboardingPage,
              onTap: () {
                Navigator.of(context).push(
                  MaterialPageRoute(
                    builder: (context) => const OnboardingPage()
                  )
                );
              },
            ),

            // settings in the bottom of the drawer
            ListTile(
              title: const Text('Settings'),
              leading: const Icon(Icons.settings),
              selected: widget is SettingsPage,
              onTap: () {
                Navigator.of(context).push(
                  MaterialPageRoute(
                    builder: (context) => SettingsPage()
                  )
                );
              },
            ),
          ],
        ),
      ),
    );
  }
}