import 'package:flutter/material.dart';
import 'package:package_info/package_info.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';

import '../../model/accountModel.dart';
import '../../storage/base/settingsProvider.dart';
import '../../theming/appTheme.dart';
import '../../widget/confirmDialog.dart';
import 'debug/debugOverview.dart';
import 'debug/jsonViewer.dart';

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

  @override
  State<Settings> createState() => _SettingsState();
}

class _SettingsState extends State<Settings> {

  @override
  void initState() {
    super.initState();
  }

  bool developerMode = false;

  @override
  Widget build(BuildContext context) {

    return Consumer<SettingsProvider>(builder: (context, settings, child) {
      return Scaffold(
        appBar: AppBar(
          title: const Text("Einstellungen"),
        ),
        body: ListView(
          children: [

            ListTile(
              leading: const Icon(Icons.logout_outlined),
              title: const Text("Konto abmelden"),
              onTap: () {
                showDialog(
                  context: context,
                  builder: (context) => ConfirmDialog(
                    title: "Abmelden?",
                    content: "Möchtest du dich wirklich abmelden?",
                    confirmButton: "Abmelden",
                    onConfirm: () {
                      SharedPreferences.getInstance().then((value) => {
                        value.clear(),
                      }).then((value) => {
                        Provider.of<AccountModel>(context, listen: false).logout(),
                        Navigator.popUntil(context, (route) => !Navigator.canPop(context)),
                      });
                    },
                  ),
                );
              },
            ),

            const Divider(),

            ListTile(
              leading: const Icon(Icons.dark_mode_outlined),
              title: const Text("Farbgebung"),
              trailing: DropdownButton<ThemeMode>(
                value: settings.val().appTheme,
                icon: const Icon(Icons.arrow_drop_down),
                items: ThemeMode.values.map((e) => DropdownMenuItem<ThemeMode>(
                  value: e,
                  enabled: e != settings.val().appTheme,
                  child: Row(
                    children: [
                      Icon(AppTheme.getDisplayOptions(e).icon),
                      const SizedBox(width: 10),
                      Text(AppTheme.getDisplayOptions(e).displayName),
                    ],
                  ),
                )).toList(),
                onChanged: (e) {
                  setState(() {
                    settings.val(write: true).appTheme = e!;
                  });
                },
              ),
            ),

            const Divider(),

            ListTile(
              leading: const Icon(Icons.live_help_outlined),
              title: const Text("Informationen und Lizenzen"),
              onTap: () {
                PackageInfo.fromPlatform().then((appInfo) {
                  showAboutDialog(
                    context: context,
                    applicationIcon: const Icon(Icons.apps),
                    applicationName: "MarianumMobile",
                    applicationVersion: "${appInfo.appName}\n\nPackage: ${appInfo.packageName}\n\nVersion: ${appInfo.version}\nBuild: ${appInfo.buildNumber}",
                    applicationLegalese: "Dies ist ein Inoffizieller Nextcloud & Webuntis Client und wird nicht vom Marianum selbst betrieben.\n"
                    "Keinerlei Gewähr für Vollständigkeit, Richtigkeit und Aktualität!\n\n"
                    "Development build\n"
                    "Marianum Fulda 2023 Elias Müller",
                  );
                });
              },
              trailing: const Icon(Icons.arrow_right),
            ),

            ListTile(
              leading: const Icon(Icons.policy_outlined),
              title: const Text("Datenschutz"),
              onTap: () {
                ConfirmDialog.openBrowser(context, "https://mhsl.eu/datenschutz.html");
              },
              trailing: const Icon(Icons.open_in_new),
            ),

            ListTile(
              leading: const Icon(Icons.badge_outlined),
              title: const Text("Impressum"),
              onTap: () {
                ConfirmDialog.openBrowser(context, "https://mhsl.eu/id.html");
              },
              trailing: const Icon(Icons.open_in_new),
            ),

            const Divider(),

            ListTile(
              leading: const Icon(Icons.developer_mode_outlined),
              title: const Text("Entwickleransicht"),
              trailing: Checkbox(
                visualDensity: const VisualDensity(horizontal: VisualDensity.minimumDensity),
                value: settings.val().devToolsEnabled,
                onChanged: (state) {
                  changeView() => setState(() {
                    settings.val(write: true).devToolsEnabled = state ?? false;
                  });

                  if(!state!) {
                    changeView();
                    return;
                  }

                  ConfirmDialog(
                    title: "Entwicklermodus",
                    content: ""
                        "Die Entwickleransicht bietet erweiterte Funktionen, die für den üblichen Gebrauch nicht benötigt werden.\n\nDie Verwendung der Tools kann darüber hinaus bei falscher Verwendung zu Fehlern führen.\n\n"
                        "Aktivieren auf eigene Verantwortung.",
                    confirmButton: "Ja, ich verstehe das Risiko",
                    cancelButton: "Nein, zurück zur App",
                    onConfirm: () {
                      changeView();
                    },
                  ).asDialog(context);
                },
              ),
            ),

            Visibility(
              visible: settings.val().devToolsEnabled,
              child: Column(
                children: [
                  ListTile(
                    leading: const Icon(Icons.logo_dev_outlined),
                    title: const Text("Logging verbosity"),
                    trailing: DropdownButton<String>(
                      value: "1",
                      items: ["1", "2", "3"].map((e) => DropdownMenuItem<String>(value: e, child: Text(e))).toList(),
                      onChanged: (e) {

                      },
                    ),
                  ),
                  ListTile(
                    leading: const Icon(Icons.data_object),
                    title: const Text("Cache JSON dump"),
                    onTap: () {
                      Navigator.push(context, MaterialPageRoute(builder: (context) {
                        return const DebugOverview();
                      }));
                    },
                    trailing: const Icon(Icons.arrow_right),
                  ),
                  ListTile(
                    leading: const Icon(Icons.settings_applications_outlined),
                    title: const Text("Storage JSON dump"),
                    onTap: () {
                      JsonViewer.asDialog(context, settings.val().toJson());
                    },
                  ),
                ],
              ),
            ),
          ],
        ),
      );
    });
  }
}