// ignore: must_be_immutable
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/viewModel/authentication_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/dashboard_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/profile-welcome-widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:provider/provider.dart';

// ignore: must_be_immutable
class HomeScreenHeader extends StatefulWidget with PreferredSizeWidget {

  final DashboardViewModel model;
  final Function onOpenDrawer;

  double height = SizeConfig.heightMultiplier *
      (SizeConfig.isHeightVeryShort ? 10 : 6);

  HomeScreenHeader({Key? key, required this.model, required this.onOpenDrawer}) : super(key: key);

  @override
  _HomeScreenHeaderState createState() => _HomeScreenHeaderState();

  @override
  Size get preferredSize => Size(double.maxFinite,height);
}

class _HomeScreenHeaderState extends State<HomeScreenHeader> {
  ProjectViewModel? projectsProvider;
  int? clinicId;


  AuthenticationViewModel? authenticationViewModel;


  @override
  Widget build(BuildContext context) {
    ProjectViewModel projectsProvider = Provider.of<ProjectViewModel>(context);
    authenticationViewModel = Provider.of<AuthenticationViewModel>(context);

    return widget.model.state == ViewState.Busy
        ? Container(color: Colors.grey.withOpacity(0.65))
        : Container(
            color: Colors.grey[100],
            child: Stack(children: [
              IconButton(
                icon: Icon(FontAwesomeIcons.ellipsisH),
                iconSize: SizeConfig.heightMultiplier * (SizeConfig.isHeightVeryShort?4: 3),
                color: Colors.black,
                onPressed: () {
                  widget.onOpenDrawer();
            },
          ),
          Column(
              children: <Widget>[
                ProfileWelcomeWidget(
                  Row(
                    mainAxisAlignment: MainAxisAlignment.end,
                    children: [
                      Container(
                        width: MediaQuery
                            .of(context)
                            .size
                            .width * .6,
                        child: projectsProvider.doctorClinicsList.length >
                            0
                            ? Stack(
                          children: [
                            DropdownButtonHideUnderline(
                                child: DropdownButton(
                                  dropdownColor: Colors.white,
                                  iconEnabledColor: Colors.black,
                                  isExpanded: true,
                                  value: clinicId == null
                                      ? projectsProvider
                                      .doctorClinicsList[0].clinicID
                                      : clinicId,
                                  iconSize: SizeConfig.widthMultiplier * 7,
                                  elevation: 16,
                                  selectedItemBuilder:
                                      (BuildContext context) {
                                    return projectsProvider
                                        .doctorClinicsList
                                        .map((item) {
                                      return Row(
                                        mainAxisSize: MainAxisSize.max,
                                        mainAxisAlignment:
                                        MainAxisAlignment.end,
                                        children: <Widget>[
                                          Column(
                                            mainAxisAlignment:
                                            MainAxisAlignment
                                                .center,
                                            crossAxisAlignment: CrossAxisAlignment.center,
                                            children: [
                                              Container(
                                                  padding:
                                                  EdgeInsets.all(2),
                                                  margin:
                                                  EdgeInsets.all(2),
                                                  decoration:
                                                  new BoxDecoration(
                                                    color:
                                                    Colors.red[800],
                                                    borderRadius:
                                                    BorderRadius
                                                        .circular(
                                                        20),
                                                  ),
                                                  constraints:
                                                  BoxConstraints(
                                                    minWidth: SizeConfig
                                                        .getHeightMultiplier(
                                                        height: widget.height) *
                                                        35,
                                                    minHeight: SizeConfig
                                                        .getHeightMultiplier(
                                                        height: widget.height) *
                                                        30,
                                                  ),
                                                  child: Center(
                                                    child: AppText(
                                                      projectsProvider
                                                          .doctorClinicsList
                                                          .length
                                                          .toString(),
                                                      color:
                                                      Colors.white,
                                                      fontSize:
                                                      projectsProvider
                                                          .isArabic
                                                          ? SizeConfig
                                                          .getHeightMultiplier(
                                                          height: widget.height)
                                                          : SizeConfig
                                                          .getHeightMultiplier(
                                                          height: widget
                                                              .height) * 20,
                                                      textAlign:
                                                      TextAlign
                                                          .center,
                                                    ),
                                                  )),
                                            ],
                                          ),
                                          AppText(item.clinicName,
                                              fontSize: SizeConfig
                                                  .getTextMultiplierBasedOnWidth(
                                                  width: MediaQuery
                                                      .of(context)
                                                      .size
                                                      .width * .6) * (SizeConfig.isWidthLarge?4:5),
                                              color: Color(0xFF2B353E),
                                              maxLines: 1,
                                              maxLength: 2,
                                              letterSpacing: -0.96,
                                              textOverflow: TextOverflow
                                                  .ellipsis,
                                              fontWeight:
                                              FontWeight.bold,
                                              textAlign: TextAlign.end),
                                        ],
                                      );
                                    }).toList();
                                  },
                                  onChanged: (int? newValue) async {
                                    setState(() {
                                      clinicId = newValue;
                                    });

                                    GifLoaderDialogUtils.showMyDialog(
                                        context);
                                    await widget.model.changeClinic(newValue!,
                                        authenticationViewModel!);
                                    GifLoaderDialogUtils.hideDialog(
                                        context);
                                    if (widget.model.state ==
                                        ViewState.ErrorLocal) {
                                      DrAppToastMsg.showErrorToast(
                                          widget.model.error);
                                    }
                                  },
                                  items: projectsProvider
                                      .doctorClinicsList
                                      .map((item) {
                                    return DropdownMenuItem(
                                      child: AppText(
                                        item.clinicName,
                                        textAlign: TextAlign.left,
                                      ),
                                      value: item.clinicID,
                                    );
                                  }).toList(),
                                )),
                          ],
                        )
                            : AppText(
                            TranslationBase
                                .of(context)
                                .noClinic),
                      ),
                    ],
                  ),
                  isClinic: true,
                  height: widget.height,
                ),
              ])
        ]));
  }


}