import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:logging/logging.dart';

import '../globals.dart';
import '../routes.dart';
import '../services/auth_service.dart';
import 'login_aware_cached_network_image.dart';

class StandardAppDrawer extends StatelessWidget {
  final bool skipPopDismiss;

  static final _logger = Logger('$StandardAppDrawer');

  const StandardAppDrawer({
    super.key,
    this.skipPopDismiss = false,
  });

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Drawer(
        child: ListView(
          padding: EdgeInsets.zero,
          children: [
            ...getIt<AccountsService>().loggedInProfiles.map(
                  (p) => ListTile(
                    onTap: () async {
                      await getIt<AccountsService>().setActiveProfile(p);
                      if (!skipPopDismiss &&
                          context.mounted &&
                          context.canPop()) {
                        try {
                          context.pop();
                        } catch (e) {
                          context.go(ScreenPaths.timelines);
                          _logger.severe(
                              'Error trying to close the drawer, going home: $e');
                        }
                      }
                    },
                    leading: CircleAvatar(
                        child:
                            LoginAwareCachedNetworkImage(imageUrl: p.avatar)),
                    title: Text(
                      p.username,
                      style: p == getIt<AccountsService>().currentProfile
                          ? const TextStyle(fontWeight: FontWeight.bold)
                          : null,
                    ),
                    subtitle: Text(
                      p.serverName,
                      style: p == getIt<AccountsService>().currentProfile
                          ? const TextStyle(fontWeight: FontWeight.bold)
                          : null,
                    ),
                  ),
                ),
            buildMenuButton(
              context,
              'Manage Profiles',
              () => context.pushNamed(ScreenPaths.manageProfiles),
            ),
            const Divider(),
            buildMenuButton(
              context,
              'Gallery',
              () => context.pushNamed(ScreenPaths.gallery),
            ),
            buildMenuButton(
              context,
              'Direct Messages',
              () => context.pushNamed(ScreenPaths.messages),
            ),
            const Divider(),
            buildMenuButton(
              context,
              'Blocks',
              () => context.pushNamed(ScreenPaths.blocks),
            ),
            buildMenuButton(
              context,
              'Filters',
              () => context.pushNamed(ScreenPaths.filters),
            ),
            buildMenuButton(
              context,
              'Circles Management',
              () => context.pushNamed(ScreenPaths.circleManagement),
            ),
            buildMenuButton(
              context,
              'Settings',
              () => context.pushNamed(ScreenPaths.settings),
            ),
            // TODO Add back in clearing ability but has to do disk caches too
            // buildMenuButton(context, 'Clear Caches', () async {
            //   final confirm = await showYesNoDialog(
            //       context, 'You want to clear all memory and disk cache data?');
            //   if (confirm == true) {
            //     clearCaches();
            //   }
            // }),
          ],
        ),
      ),
    );
  }

  Widget buildMenuButton(BuildContext context, String title, Function() onTap) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: ListTile(
        title: Text(title),
        onTap: () {
          context.pop();
          onTap();
        },
      ),
    );
  }
}
