import 'package:expandable_group/expandable_group_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_progress_hud/flutter_progress_hud.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:fluttericon/brandico_icons.dart';
import 'package:fluttericon/elusive_icons.dart';
import 'package:fluttericon/entypo_icons.dart';
import 'package:fluttericon/font_awesome5_icons.dart';
import 'package:fluttericon/modern_pictograms_icons.dart';
import 'package:unit2/bloc/profile/primary_information/address/address_bloc.dart';
import 'package:unit2/bloc/profile/primary_information/citizenship/citizenship_bloc.dart';
import 'package:unit2/bloc/profile/primary_information/contact/contact_bloc.dart';
import 'package:unit2/bloc/profile/primary_information/identification/identification_bloc.dart';
import 'package:unit2/bloc/profile/profile_bloc.dart';
import 'package:unit2/model/login_data/user_info/user_data.dart';
import 'package:unit2/screens/profile/components/basic_information/address_screen.dart';
import 'package:unit2/screens/profile/components/basic_information/citizenship_screen.dart';
import 'package:unit2/screens/profile/components/basic_information/contact_information_screen.dart';
import 'package:unit2/screens/profile/components/basic_information/identification_information_screen.dart';
import 'package:unit2/screens/profile/components/basic_information/primary_information_screen.dart';
import 'package:unit2/screens/profile/components/education_screen.dart';
import 'package:unit2/screens/profile/components/eligibility_screen.dart';
import 'package:unit2/screens/profile/components/family_background_screen.dart';
import 'package:unit2/screens/profile/components/learning_and_development_screen.dart';
import 'package:unit2/screens/profile/components/loading_screen.dart';
import 'package:unit2/screens/profile/components/other_information/non_academic_recognition_screen.dart';
import 'package:unit2/screens/profile/components/other_information/org_membership_screen.dart';
import 'package:unit2/screens/profile/components/other_information/skills_and_hobbies_screen.dart';
import 'package:unit2/screens/profile/components/references_screen.dart';
import 'package:unit2/screens/profile/components/work_history_screen.dart';
import 'package:unit2/screens/profile/components/voluntary_works_screen.dart';
import 'package:unit2/theme-data.dart/colors.dart';
import 'package:unit2/widgets/error_state.dart';
import '../../bloc/profile/eligibility/eligibility_bloc.dart';
import '../../bloc/profile/family/family_bloc.dart';
import '../../bloc/profile/education/education_bloc.dart';
import '../../bloc/profile/learningDevelopment/learning_development_bloc.dart';
import '../../bloc/profile/other_information/hobbies/hoobies_bloc.dart';
import '../../bloc/profile/other_information/non_academic_recognition.dart/non_academic_recognition_bloc.dart';
import '../../bloc/profile/other_information/org_membership/organization_membership_bloc.dart';
import '../../bloc/profile/references/references_bloc.dart';
import '../../bloc/profile/voluntary_works/voluntary_work_bloc.dart';
import '../../bloc/profile/workHistory/workHistory_bloc.dart';
import '../../bloc/user/user_bloc.dart';
import '../../model/profile/basic_information/primary-information.dart';
import '../unit2/homepage.dart/components/menu.dart';
import 'components/main_menu.dart';
import 'components/submenu.dart';

class ProfileInfo extends StatelessWidget {
  const ProfileInfo({super.key});

  @override
  Widget build(BuildContext context) {
    int? profileId;
    String? token;
    Profile profile;
    return Scaffold(
        appBar: AppBar(
          backgroundColor: primary,
          centerTitle: true,
          title: const Text('Profile'),
        ),
        body: ProgressHUD(
          padding: const EdgeInsets.all(24),
          backgroundColor: Colors.black87,
          indicatorWidget: const SpinKitFadingCircle(color: Colors.white),
          child: BlocBuilder<UserBloc, UserState>(builder: (context, state) {
            if (state is UserLoggedIn) {
              profileId = state.userData!.user!.login!.user!.profileId;
              token = state.userData!.user!.login!.token!;
              profile = state.userData!.employeeInfo!.profile!;
        
              return BlocConsumer<ProfileBloc, ProfileState>(
                listener: (context, state,){
                  if (state is ProfileLoading) {
                    final progress = ProgressHUD.of(context);
                    progress!.showWithText("Please wait...");
                  }
                  if (state is ProfileLoaded || state is ProfileErrorState || state is BasicInformationEditingState) {
                    final progress = ProgressHUD.of(context);
                    progress?.dismiss();
                  }
                },
                builder: (context, state) {
                  if (state is ProfileLoaded) {
                    return Container(
                      padding: const EdgeInsets.symmetric(
                          vertical: 12, horizontal: 12),
                      child: ListView(
                        children: [
                          Text(
                            "View and Update your Profile Information",
                            textAlign: TextAlign.center,
                            style: Theme.of(context).textTheme.bodyLarge,
                          ),
                          ExpandableGroup(
                              collapsedIcon:
                                  const Icon(Icons.keyboard_arrow_down),
                              expandedIcon: const Icon(Icons.keyboard_arrow_up),
                              header: const ListTile(
                                leading: Icon(
                                  Elusive.address_book,
                                  color: primary,
                                ),
                                title: Text(
                                  "Basic Information",
                                  style: TextStyle(fontWeight: FontWeight.bold),
                                ),
                              ),
                              items: [
                                subMenu(Icons.person, "Primary", () {
                                  
                                  Navigator.push(context, MaterialPageRoute(
                                      builder: (BuildContext context) {
                                    return BlocProvider<ProfileBloc>.value(value: ProfileBloc()..add(GetPrimaryBasicInfo(primaryBasicInformation: profile)),child: PrimaryInfo(token: token!,profileId: profileId!,),);
                                  }));
                                }),
                                subMenu(Icons.home, "Addresses", () {
                                  Navigator.push(context, MaterialPageRoute(
                                      builder: (BuildContext context) {
                                    return BlocProvider(
                                      create: (context) => AddressBloc()
                                        ..add(GetAddress(
                                            addresses: state.profileInformation
                                                .basicInfo.addresses)),
                                      child: const AddressScreen(),
                                    );
                                  }));
                                }),
                                subMenu(Icons.contact_mail, "Identifications",
                                    () {
                                  Navigator.push(context, MaterialPageRoute(
                                      builder: (BuildContext context) {
                                    return BlocProvider(
                                      create: (context) => IdentificationBloc()
                                        ..add(GetIdentifications(
                                            identificationInformation: state
                                                .profileInformation
                                                .basicInfo
                                                .identifications)),
                                      child: const IdentificationsScreen(),
                                    );
                                  }));
                                }),
                                subMenu(Icons.contact_phone, "Contact Info",
                                    () {
                                  Navigator.push(context, MaterialPageRoute(
                                      builder: (BuildContext context) {
                                    return BlocProvider(
                                      create: (context) => ContactBloc()
                                        ..add(GetContacts(
                                            contactInformations: state
                                                .profileInformation
                                                .basicInfo
                                                .contactInformation)),
                                      child: const ContactInformationScreen(),
                                    );
                                  }));
                                }),
                                subMenu(Icons.flag, "Citizenships", () {
                                    Navigator.push(context, MaterialPageRoute(
                                      builder: (BuildContext context) {
                         
                                    return BlocProvider(
                                      create: (context) => CitizenshipBloc()
                                        ..add(GetCitizenship(
                                            citizenship: state
                                                .profileInformation
                                                .basicInfo
                                                .citizenships)),
                                      child:  CitizenShipScreen(profileId: profileId!,token: token!),
                                    );
                                  }));
                                }),
                              ]),
                          const Divider(),
                          MainMenu(
                            icon: Elusive.group,
                            title: "Family",
                            onTap: () {
                              Navigator.push(context, MaterialPageRoute(
                                  builder: (BuildContext context) {
                                return BlocProvider(
                                  create: (context) => FamilyBloc()
                                    ..add(GetFamilies(
                                        profileId: profileId!, token: token!)),
                                  child: const FamilyBackgroundScreen(),
                                );
                              }));
                            },
                          ),
                          const Divider(),
                          MainMenu(
                            icon: FontAwesome5.graduation_cap,
                            title: "Education",
                            onTap: () {
                              Navigator.push(context, MaterialPageRoute(
                                  builder: (BuildContext context) {
                                return BlocProvider(
                                  create: (context) => EducationBloc()
                                    ..add(GetEducationalBackground(
                                        profileId: profileId!, token: token!)),
                                  child: const EducationScreen(),
                                );
                              }));
                            },
                          ),
                          const Divider(),
                          MainMenu(
                            icon: Icons.stars,
                            title: "Eligibility",
                            onTap: () {
                              Navigator.push(context, MaterialPageRoute(
                                  builder: (BuildContext context) {
                                return BlocProvider(
                                  create: (context) => EligibilityBloc()
                                    ..add(GetEligibilities(
                                        profileId: profileId!, token: token!)),
                                  child: const EligibiltyScreen(),
                                );
                              }));
                            },
                          ),
                          const Divider(),
                          MainMenu(
                            icon: FontAwesome5.shopping_bag,
                            title: "Work History",
                            onTap: () {
                              Navigator.push(context, MaterialPageRoute(
                                  builder: (BuildContext context) {
                                return BlocProvider(
                                  create: (context) => WorkHistoryBloc()
                                    ..add(GetWorkHistories(
                                        profileId: profileId!, token: token!)),
                                  child: const WorkHistoryScreen(),
                                );
                              }));
                            },
                          ),
                          const Divider(),
                          MainMenu(
                            icon: FontAwesome5.walking,
                            title: "Voluntary Work & Civic Services",
                            onTap: () {
                              Navigator.push(context, MaterialPageRoute(
                                  builder: (BuildContext context) {
                                return BlocProvider(
                                  create: (context) => VoluntaryWorkBloc()
                                    ..add(GetVoluntarWorks(
                                        profileId: profileId!, token: token!)),
                                  child: const VolunataryWorkScreen(),
                                );
                              }));
                            },
                          ),
                          const Divider(),
                          MainMenu(
                            icon: Elusive.lightbulb,
                            title: "Learning & Development",
                            onTap: () {
                              Navigator.push(context, MaterialPageRoute(
                                  builder: (BuildContext context) {
                                return BlocProvider(
                                  create: (context) => LearningDevelopmentBloc()
                                    ..add(GetLearningDevelopments(
                                        profileId: profileId!, token: token!)),
                                  child: const LearningAndDevelopmentScreen(),
                                );
                              }));
                            },
                          ),
                          const Divider(),
                          MainMenu(
                            icon: Brandico.codepen,
                            title: "Personal References",
                            onTap: () {
                              Navigator.push(context, MaterialPageRoute(
                                  builder: (BuildContext context) {
                                return BlocProvider(
                                  create: (context) => ReferencesBloc()
                                    ..add(GetReferences(
                                        profileId: profileId!, token: token!)),
                                  child: const ReferencesScreen(),
                                );
                              }));
                            },
                          ),
                          ExpandableGroup(
                              collapsedIcon:
                                  const Icon(Icons.keyboard_arrow_down),
                              expandedIcon: const Icon(Icons.keyboard_arrow_up),
                              header: const ListTile(
                                leading: Icon(
                                  Icons.info,
                                  color: primary,
                                ),
                                title: Text(
                                  "Other Information",
                                  style: TextStyle(fontWeight: FontWeight.bold),
                                ),
                              ),
                              items: [
                                subMenu(
                                    Icons.fitness_center, "Skills & Hobbies",
                                    () {
                                  Navigator.push(context, MaterialPageRoute(
                                      builder: (BuildContext context) {
                                    return BlocProvider(
                                      create: (context) => HoobiesBloc()
                                        ..add(GetSkillsHobbies(
                                            profileId: profileId!,
                                            token: token!)),
                                      child: const SkillHobbiesScreen(),
                                    );
                                  }));
                                }),
                                subMenu(FontAwesome5.certificate,
                                    "Organization Memberships", () {
                                  Navigator.push(context, MaterialPageRoute(
                                      builder: (BuildContext context) {
                                    return BlocProvider(
                                      create: (context) =>
                                          OrganizationMembershipBloc()
                                            ..add(GetOrganizationMembership(
                                                profileId: profileId!,
                                                token: token!)),
                                      child: const OrgMembershipsScreen(),
                                    );
                                  }));
                                }),
                                subMenu(Entypo.doc_text,
                                    "Non-Academic Recognitions", () {
                                  Navigator.push(context, MaterialPageRoute(
                                      builder: (BuildContext context) {
                                    return BlocProvider(
                                      create: (context) =>
                                          NonAcademicRecognitionBloc()
                                            ..add(GetNonAcademicRecognition(
                                                profileId: profileId!,
                                                token: token!)),
                                      child:
                                          const NonAcademicRecognitionScreen(),
                                    );
                                  }));
                                }),
                              ]),
                          ExpandableGroup(
                              collapsedIcon:
                                  const Icon(Icons.keyboard_arrow_down),
                              expandedIcon: const Icon(Icons.keyboard_arrow_up),
                              header: const ListTile(
                                leading: Icon(
                                  FontAwesome5.laptop_house,
                                  color: primary,
                                ),
                                title: Text(
                                  "Assets",
                                  style: TextStyle(fontWeight: FontWeight.bold),
                                ),
                              ),
                              items: [
                                subMenu(ModernPictograms.home,
                                    "Real Property Tax", () {}),
                              ]),
                        ],
                      ),
                    );
                  }
                  if (state is ProfileLoading) {
           
                    return const LoadingScreen();
                  }
                  if (state is ProfileErrorState) {
               return SomethingWentWrong(message: state.mesage, onpressed: (){      BlocProvider.of<ProfileBloc>(
                context)
            .add(LoadProfile(token:token!, userID: profileId!));});
                  }

                  return Container();
                },
              );
            }
            return Container();
          }),
        ));
  }
}
