import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/modules/site_request_module/screens/site_request_history_screen.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/pages/login_page.dart';
import 'package:test_sa/new_views/swipe_module/swipe_history_view.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/pages/user/notifications/notifications_page.dart';

import '../../controllers/providers/api/user_provider.dart';
import '../../controllers/providers/settings/setting_provider.dart';
import '../../views/pages/user/profile_page.dart';
import '../../views/widgets/dialogs/dialog.dart';
import '../pages/settings_page.dart';

class AppDrawer extends StatelessWidget {
  const AppDrawer({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final settingProvider = Provider.of<SettingProvider>(context, listen: false);
    final userProvider = Provider.of<UserProvider>(context, listen: false);
    return Drawer(
      backgroundColor: AppColor.background(context),
      width: MediaQuery.of(context).size.width * .8,
      child: SafeArea(
        top: false,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.start,
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Consumer<UserProvider>(builder: (context, snapshot, _) {
                  return CircleAvatar(
                    radius: 45,
                    backgroundColor: AppColor.scaffoldBackground(context),
                    child: Padding(
                      padding: const EdgeInsets.all(1), // Border radius
                      child: ClipOval(
                        child: snapshot.profileImage != null
                            ? Image.file(snapshot.profileImage!)
                            : (snapshot.user?.profilePhotoName?.isNotEmpty ?? false)
                                ? Image.network(snapshot.user!.profilePhotoName!)
                                : Icon(Icons.person, size: 50, color: AppColor.icon2Color(context)),
                      ),
                    ),
                  );
                }).onPress(() => Navigator.of(context).pushNamed(ProfilePage.id)),
                Icon(Icons.clear, size: 32, color: AppColor.icon2Color(context)).onPress(() => Navigator.of(context).pop())
              ],
            ),
            8.height,
            (userProvider.user?.username ?? "").heading4(context).custom(color: AppColor.labelTextStyleColor(context)),
            if ((userProvider.user?.email ?? "").isNotEmpty) (userProvider.user!.email!).heading6(context).custom(color: AppColor.lightTextColor(context)),
            16.height,
            const Divider().defaultStyle(context),
            ListView(
              padding: const EdgeInsets.only(top: 24),
              children: [
                drawerItem("drawer_notification", context.translation.notifications, context).onPress(() => Navigator.of(context).pushNamed(NotificationsPage.id)),
                18.height,
                // drawerItem("help_center", context.translation.helpCenter, context) /*.onPress(() => Navigator.of(context).pushNamed(HelpCenterPage.id))*/,
                // 18.height,
                // drawerItem("rate_us", context.translation.rateUs, context),
                // 18.height,
                drawerItem("setting", context.translation.settings, context).onPress(() => Navigator.of(context).pushNamed(SettingsPage.id)),
                18.height,
                drawerItem("site_request_icon", "Site Request", context).onPress(() => Navigator.of(context).pushNamed(SiteRequestHistoryScreen.routeName)),
                18.height,
                if (userProvider.user != null && userProvider.user?.employeeIsHMG == false)
                  drawerItem("swipe", "Swipe History", context).onPress(() => Navigator.of(context).pushNamed(SwipeHistoryView.routeName)),
                // 18.height,
                // drawerItem("report", context.translation.reportBg, context) /*.onPress(() => Navigator.of(context).pushNamed(ReportBugPage.id))*/,
                // 18.height,
                // drawerItem("whats_new", context.translation.whatsNew, context),
              ],
            ).expanded,
            drawerItem("logout", context.translation.logout, context, color: AppColor.red30).onPress(() async {
              bool result = await showDialog(
                context: context,
                builder: (_) => AAlertDialog(title: context.translation.signOut, content: context.translation.logoutAlert),
              );
              if (result) {
                bool isSuccess = await userProvider.logout(context);
                if (isSuccess) {
                  settingProvider.resetSettings();
                  userProvider.reset();
                  Navigator.of(context).pop();
                  Navigator.of(context).pop();
                  Navigator.of(context).pushNamedAndRemoveUntil(LoginPage.routeName, (routes) => true);
                }
              }
            }),
            16.height,
            const Divider().defaultStyle(context),
            16.height,
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Text(
                  "Powered By Cloud Solutions",
                  style: AppTextStyles.heading3.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50, fontSize: 12),
                  textScaleFactor: AppStyle.getScaleFactor(context),
                ),
                6.width,
                Image.asset("assets/images/cloud_logo.png", width: 32, height: 32)
              ],
            )
          ],
        ).paddingOnly(top: 66, start: 16, end: 24, bottom: 18),
      ),
    );
  }

  Widget drawerItem(String icon, String title, BuildContext context, {Color? color}) {
    return Row(
      children: [
        (icon ?? "").toSvgAsset(width: 24, height: 24, color: color ?? AppColor.icon2Color(context)),
        16.width,
        Text(
          title,
          style: AppTextStyles.heading6.copyWith(color: color ?? AppColor.labelTextStyleColor(context)),
        ),
      ],
    );
  }
}
