import 'package:filesize/filesize.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

import '../../storage/base/settingsProvider.dart';
import '../../widget/centeredLeading.dart';
import '../../widget/confirmDialog.dart';
import '../../widget/debug/cacheView.dart';
import '../../widget/debug/jsonViewer.dart';

class DevToolsSettingsDialog extends StatefulWidget {
  final SettingsProvider settings;
  const DevToolsSettingsDialog({required this.settings, super.key});

  @override
  State<DevToolsSettingsDialog> createState() => _DevToolsSettingsDialogState();
}

class _DevToolsSettingsDialogState extends State<DevToolsSettingsDialog> {
  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        ListTile(
          leading: const CenteredLeading(Icon(Icons.speed_outlined)),
          title: const Text("Performance overlays"),
          trailing: const Icon(Icons.arrow_right),
          onTap: () {
            showDialog(context: context, builder: (context) => SimpleDialog(
              children: [
                ListTile(
                  leading: const Icon(Icons.auto_graph_outlined),
                  title: const Text("Performance graph"),
                  trailing: Checkbox(
                    value: widget.settings.val().devToolsSettings.showPerformanceOverlay,
                    onChanged: (e) => widget.settings.val(write: true).devToolsSettings.showPerformanceOverlay = e!,
                  ),
                ),
                ListTile(
                  leading: const Icon(Icons.screen_search_desktop_outlined),
                  title: const Text("Indicate offscreen layers"),
                  trailing: Checkbox(
                    value: widget.settings.val().devToolsSettings.checkerboardOffscreenLayers,
                    onChanged: (e) => widget.settings.val(write: true).devToolsSettings.checkerboardOffscreenLayers = e!,
                  ),
                ),
                ListTile(
                  leading: const Icon(Icons.imagesearch_roller_outlined),
                  title: const Text("Indicate raster cache images"),
                  trailing: Checkbox(
                    value: widget.settings.val().devToolsSettings.checkerboardRasterCacheImages,
                    onChanged: (e) => widget.settings.val(write: true).devToolsSettings.checkerboardRasterCacheImages = e!,
                  ),
                ),
              ],
            ));
          },
        ),
        ListTile(
          leading: const CenteredLeading(Icon(Icons.image_outlined)),
          title: const Text("Cached Thumbnails löschen"),
          subtitle: Text("etwa ${filesize(PaintingBinding.instance.imageCache.currentSizeBytes)}"),
          onTap: () {
            ConfirmDialog(
              title: "Thumbs cache löschen",
              content: "Alle zwischengespeicherten Bilder werden gelöscht.",
              confirmButton: "Unwiederruflich löschen",
              onConfirm: () => PaintingBinding.instance.imageCache.clear(),
            ).asDialog(context);
          },
          trailing: const Icon(Icons.arrow_right),
        ),
        ListTile(
          leading: const CenteredLeading(Icon(Icons.settings_applications_outlined)),
          title: const Text("Settings-storage JSON dump"),
          subtitle: Text("etwa ${filesize(widget.settings.val().toJson().toString().length * 8)}\nLange tippen um zu löschen"),
          onTap: () {
            JsonViewer.asDialog(context, widget.settings.val().toJson());
          },
          onLongPress: () {
            ConfirmDialog(
              title: "App-Speicher löschen",
              content: "Alle Einstellungen gehen verloren! Accountdaten sowie App-Daten sind nicht betroffen.",
              confirmButton: "Unwiederruflich Löschen",
              onConfirm: () {
                Provider.of<SettingsProvider>(context, listen: false).reset();
              },
            ).asDialog(context);
          },
          trailing: const Icon(Icons.arrow_right),
        ),
        ListTile(
          leading: const CenteredLeading(Icon(Icons.data_object)),
          title: const Text("Cache-storage JSON dump"),
          subtitle: FutureBuilder(
            future: const CacheView().totalSize(),
            builder: (context, snapshot) {
              return Text("etwa ${snapshot.hasError ? "?" : snapshot.hasData ? filesize(snapshot.data) : "..."}\nLange tippen um zu löschen");
            },
          ),
          onTap: () {
            Navigator.push(context, MaterialPageRoute(builder: (context) {
              return const CacheView();
            }));
          },
          onLongPress: () {
            ConfirmDialog(
              title: "App-Cache löschen",
              content: "Alle cache Einträge werden gelöscht. Der Cache wird bei Nutzung der App automatisch erneut aufgebaut",
              confirmButton: "Unwiederruflich löschen",
              onConfirm: () => const CacheView().clear().then((value) => setState((){})),
            ).asDialog(context);
          },
          trailing: const Icon(Icons.arrow_right),
        ),
      ],
    );
  }
}