import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/profile_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/get_employee_phones_model.dart';
import 'package:mohem_flutter_app/models/profile/phone_number_types_model.dart';
import 'package:mohem_flutter_app/models/profile/submit_phone_transactions.dart';
import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart';

class PhoneNumbers extends StatefulWidget {
  List<GetEmployeePhonesList> getEmployeePhonesList;

  PhoneNumbers({Key? key, required this.getEmployeePhonesList}) : super(key: key);

  @override
  _PhoneNumbersState createState() => _PhoneNumbersState();
}

class _PhoneNumbersState extends State<PhoneNumbers> {
  List<GetPhoneNumberTypesModel> getPhoneNumberTypesList = [];
  SubmitPhonesTransactionList submitPhoneNumbers = SubmitPhonesTransactionList();
  @override
  void initState() {
    super.initState();
    getPhoneNumberTypes();
  }

  void getPhoneNumberTypes() async {
    Utils.showLoading(context);
    getPhoneNumberTypesList = await ProfileApiClient().getPhoneNumberTypes();
    setState(() {});
    Utils.hideLoading(context);
  }

  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBarWidget(
        context,
        title: LocaleKeys.profile_contactDetails.tr(),
      ),
      backgroundColor: MyColors.backgroundColor,
      bottomSheet: footer(),
      body: SingleChildScrollView(
        child: Column(
          children: [
            Container(
              width: double.infinity,
              margin: EdgeInsets.only(left: 25, right: 25, top: 25),
              padding: EdgeInsets.all(20),
              // height: 400,
              decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(10.0), border: Border.all(color: Color.fromARGB(255, 209, 207, 207))),
              child: InkWell(
                child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
                  Icon(
                    Icons.add,
                    color: Color(0xff259CB8),
                  ),
                  Text(
                    LocaleKeys.addRow.tr(),
                    style: TextStyle(color: Color(0xff259CB8), fontWeight: FontWeight.bold),
                  )
                ]),
                onTap: () {
                  addNewRow();
                },
              ),
            ),
            Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: widget.getEmployeePhonesList
                    .map((e) => e.aCTION != 'DELETE_ROW'
                        ? Container(
                            width: double.infinity,
                            margin: EdgeInsets.only(
                              top: 20,
                              left: 26,
                              right: 26,
                            ),
                            padding: EdgeInsets.only(left: 14, right: 14, top: 15, bottom: 15),
                            // height: 400,
                            decoration: BoxDecoration(
                              boxShadow: [
                                BoxShadow(
                                  color: Colors.grey.withOpacity(0.5),
                                  spreadRadius: 5,
                                  blurRadius: 26,
                                  offset: Offset(0, 3),
                                ),
                              ],
                              color: Colors.white,
                              borderRadius: BorderRadius.circular(10.0),
                            ),
                            child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
                              PopupMenuButton(
                                  child: DynamicTextFieldWidget(
                                    LocaleKeys.pleaseSelect.tr(),
                                    e.pHONETYPEMEANING ?? "",
                                    isEnable: false,
                                    isPopup: true,
                                  ).paddingOnly(bottom: 12),
                                  itemBuilder: (_) => <PopupMenuItem<int>>[
                                        for (int i = 0; i < getPhoneNumberTypesList.length; i++) PopupMenuItem<int>(child: Text(getPhoneNumberTypesList![i].mEANING!), value: i),
                                      ],
                                  onSelected: (int index) {
                                    e.pHONETYPEMEANING = getPhoneNumberTypesList[index].mEANING;
                                    e.pHONETYPE = getPhoneNumberTypesList[index].cODE;
                                    setState(() {});
                                  }),
                              DynamicTextFieldWidget(
                                "",
                                e.pHONENUMBER ?? "",
                                isReadOnly: false,
                                onChange: (text) {
                                  e.pHONENUMBER = text;
                                },
                              ).paddingOnly(bottom: 12),
                              InkWell(
                                child: Row(mainAxisAlignment: MainAxisAlignment.end, children: [
                                  Icon(
                                    Icons.delete,
                                    color: Colors.red,
                                    size: 18,
                                  ),
                                  Text(
                                    LocaleKeys.delete.tr(),
                                    style: TextStyle(color: Colors.red, fontWeight: FontWeight.bold),
                                  )
                                ]),
                                onTap: () {
                                  // widget.getEmployeePhonesList.removeWhere((item) => item.pHONEID == e.pHONEID);
                                  setState(() {
                                    deleteRow(e);
                                  });
                                },
                              ),
                              SizedBox(
                                height: 10,
                              ),
                            ]))
                        : Container())
                    .toList()),
            SizedBox(
              height: 80,
            )
          ],
        ),
      ),
    );
  }

  Widget footer() {
    return Container(
      decoration: BoxDecoration(
        // borderRadius: BorderRadius.circular(10),
        color: MyColors.white,
        boxShadow: [
          BoxShadow(color: MyColors.lightGreyEFColor, spreadRadius: 3),
        ],
      ),
      child: DefaultButton(LocaleKeys.update.tr(), () async {
        updatePhone();
        //     context.setLocale(const Locale("en", "US")); // to change Loacle
        // Profile();
      }).insideContainer,
    );
  }

  void updatePhone() async {
    Utils.showLoading(context);
    setUpdateStatus();
    submitPhoneNumbers = await ProfileApiClient().submitPhoneNumbers(widget.getEmployeePhonesList);

    Utils.hideLoading(context);
    Navigator.pushNamed(context, AppRoutes.requestSubmitScreen,
        arguments: RequestSubmitScreenParams(LocaleKeys.profile_contactDetails.tr(), submitPhoneNumbers.pTRANSACTIONID!, submitPhoneNumbers.pITEMKEY!, 'phone_numbers'));
  }

  void setUpdateStatus() {
    widget.getEmployeePhonesList.forEach((element) {
      if (element.aCTION == null) {
        element.aCTION = 'UPDATE_ROW';
        element.dATEFROM = '';
        element.dATETO = '';
      }
    });
  }

  void addNewRow() {
    setState(() {
      widget.getEmployeePhonesList.add(GetEmployeePhonesList(aCTION: 'NEW_ROW'));
    });
  }

  void deleteRow(GetEmployeePhonesList row) {
    row.aCTION = 'DELETE_ROW';
  }
}
