import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/dashboard_latest/dashboard_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/new_views/app_style/app_color.dart';
import 'package:test_sa/views/pages/user/notifications/notifications_page.dart';

import '../../controllers/providers/api/user_provider.dart';
import '../../models/user.dart';

class AppBarWidget extends StatelessWidget {
  final VoidCallback onDrawerPress; // Made nullable

  const AppBarWidget({Key? key, required this.onDrawerPress}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return AppBar(
      automaticallyImplyLeading: false,
      backgroundColor: Theme.of(context).scaffoldBackgroundColor,
      titleSpacing: 0,
      title: Consumer<UserProvider>(builder: (context, snapshot, _) {
        return Row(
          // mainAxisAlignment: MainAxisAlignment.spaceBetween,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            CircleAvatar(
              radius: 24,
              backgroundColor: context.isDark ? AppColor.neutral50 : AppColor.neutral40,
              child: Padding(
                padding: const EdgeInsets.all(1), // Border radius
                child: ClipOval(
                  child: snapshot.profileImage != null
                      ? Image.file(snapshot.profileImage!) // Added null check
                      : (snapshot.user?.profilePhotoName?.isNotEmpty ?? false)
                          ? Image.network(snapshot.user!.profilePhotoName!) // Added null check
                          : const Icon(Icons.person, size: 24, color: Colors.white),
                ),
              ),
            ).onPress(onDrawerPress), // Handle potential null
            8.width,
            Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Text(
                  snapshot.user?.username ?? "", // Simplified null check
                  style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50, fontWeight: FontWeight.w600),
                ),
                Text(
                  snapshot.user?.type?.name.toCamelCase ?? "", // Simplified null check
                  style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
                ),
              ],
            ),
            const Spacer(),
            Consumer<SettingProvider>(builder: (context, settingProvider, child) {
              return Container(
                padding: const EdgeInsets.fromLTRB(12, 6, 6, 6),
                decoration: BoxDecoration(
                  borderRadius: BorderRadius.circular(8),
                  color: AppColor.background(context),
                  boxShadow: const [
                    BoxShadow(
                      color: Color(0x07000000),
                      blurRadius: 14,
                      offset: Offset(0, 0),
                      spreadRadius: 0,
                    )
                  ],
                ),
                child: DropdownButton<AssetGroup?>(
                  // Made AssetGroup nullable
                  value: settingProvider.assetGroup,
                  //iconSize: 24,
                  isDense: true,
                  icon: const Icon(Icons.keyboard_arrow_down),
                  elevation: 8,
                  // dropdownColor: Colors.amber,
                  borderRadius: BorderRadius.circular(8),
                  style: TextStyle(color: Theme.of(context).primaryColor),
                  underline: const SizedBox.shrink(),
                  onChanged: (newValue) {
                    if (settingProvider.assetGroup != newValue) {
                      settingProvider.setAssetGroup(newValue);
                      WidgetsBinding.instance.addPostFrameCallback((_) {
                        DashBoardProvider dashBoardProvider = Provider.of<DashBoardProvider>(context, listen: false);
                        dashBoardProvider.setTabs(userType: settingProvider.user!.type!, context: context);
                        dashBoardProvider.getDashBoardCount(usersType: settingProvider.user!.type!);
                        dashBoardProvider.resetRequestDataList();
                        dashBoardProvider.getRequestDetail(usersType: settingProvider.user!.type!, status: dashBoardProvider.tabs[dashBoardProvider.currentListIndex].tag);
                      });
                    }
                  },
                  items: Provider.of<UserProvider>(context, listen: false).user?.assetGroups?.map<DropdownMenuItem<AssetGroup?>>((value) {
                        // Added null check and made AssetGroup nullable
                        return DropdownMenuItem<AssetGroup?>(
                          value: value,
                          child: Text(
                            value.name ?? "",
                            style: Theme.of(context).textTheme.bodyLarge,
                          ),
                        );
                      }).toList() ??
                      [], // Added null check and empty list default
                ),
              );
            }),
            16.width,
            Stack(
              alignment: Alignment.topRight,
              children: [
                Icon(Icons.notifications, color: context.isDark ? AppColor.neutral30 : AppColor.neutral20, size: 30).paddingOnly(top: 6, end: 0),
                // todo @sikander will add count for unread notifications
                // ... (rest of the code remains the same)
              ],
            ).onPress(() {
              Navigator.of(context).pushNamed(NotificationsPage.id);
            }),
          ],
        ).paddingOnly(start: 16, end: 16);
      }),
    );
  }
}
