import 'dart:convert';
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/api_routes/http_status_manger.dart';
import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_types_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/controllers/validator/validator.dart';
import 'package:test_sa/models/call_request_for_work_order_model.dart';
import 'package:test_sa/models/engineer.dart';
import 'package:test_sa/models/part.dart';
import 'package:test_sa/models/service_report.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/buttons/app_back_button.dart';
import 'package:test_sa/views/widgets/buttons/app_button.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/e_signature/e_signature.dart';
import 'package:test_sa/views/widgets/equipment/auto_complete_devices_field.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/parts/auto_complete_parts_field.dart';
import 'package:test_sa/views/widgets/parts/part_item.dart';
import 'package:test_sa/views/widgets/status/report/service_report_equipment_status.dart';
import 'package:test_sa/views/widgets/status/report/service_report_fault_description.dart';
import 'package:test_sa/views/widgets/status/report/service_report_last_call.dart';
import 'package:test_sa/views/widgets/status/report/service_report_reasons.dart';
import 'package:test_sa/views/widgets/status/report/service_report_repair_location.dart';
import 'package:test_sa/views/widgets/timer/app_timer.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart';

import '../../../../widgets/images/multi_image_picker.dart';

class EditServiceReport extends StatefulWidget {
  static final String id = "/edit-service-report";
  final ServiceRequest request;
  final ServiceReport report;

  const EditServiceReport({Key key, this.request, this.report}) : super(key: key);

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

class _EditServiceReportState extends State<EditServiceReport> with TickerProviderStateMixin {
  UserProvider _userProvider;
  SettingProvider _settingProvider;
  ServiceRequestsProvider _serviceRequestsProvider;

  bool _validate = false;
  ServiceReport _serviceReport;
  bool _isLoading = false;
  bool _showCommentField = false;

  Subtitle _subtitle;
  final List<File> _images = [];
  final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
  final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
  TextEditingController _faultController = TextEditingController();
  TextEditingController _workPreformedController = TextEditingController();

  ServiceStatusProvider _assetTypeProvider;

  CallRequestForWorkOrder _callRequestForWorkOrder;

  @override
  void initState() {
    _serviceReport = widget.report;
    super.initState();
  }

  void getRequestForWorkOrder() async {
    _isLoading = true;
    setState(() {});
    _callRequestForWorkOrder = await _serviceRequestsProvider.getCallRequestForWorkOrder(callId: widget.request.id);
    _serviceReport.engineer = Engineer.fromJson(_callRequestForWorkOrder?.assignedEmployee?.toJson());
    await _assetTypeProvider.getTypes(user: _userProvider.user, host: _settingProvider.host);
    _isLoading = false;
    setState(() {});
  }

  @override
  void dispose() {
    _faultController.dispose();
    _workPreformedController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    _userProvider = Provider.of<UserProvider>(context);
    _settingProvider = Provider.of<SettingProvider>(context);
    _serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context);

    _assetTypeProvider = Provider.of<ServiceStatusProvider>(context);
    if (_callRequestForWorkOrder == null) {
      getRequestForWorkOrder();
    }
    _serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere(
      (element) => element.value == _callRequestForWorkOrder?.assetType,
      orElse: () => null,
    );
    _subtitle = AppLocalization.of(context).subtitle;
    return Scaffold(
      key: _scaffoldKey,
      body: SafeArea(
        child: LoadingManager(
          isLoading: _isLoading,
          isFailedLoading: false,
          stateCode: 200,
          onRefresh: () async {},
          child: Form(
            key: _formKey,
            child: Stack(
              children: [
                ListView(
                  padding: const EdgeInsets.all(16),
                  children: [
                    const SizedBox(height: 16),
                    Center(
                      child: Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: Text(
                          _subtitle.editServiceReport,
                          style: Theme.of(context).textTheme.headline5.copyWith(color: AColors.cyan, fontSize: 28, fontWeight: FontWeight.bold),
                        ),
                      ),
                    ),
                    Column(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: [
                        ASubTitle("Caller Info"),
                        const SizedBox(height: 8),
                        Container(
                          width: double.infinity,
                          padding: const EdgeInsets.all(16),
                          margin: const EdgeInsets.symmetric(vertical: 16),
                          decoration: BoxDecoration(color: AColors.grey, borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), boxShadow: const [
                            BoxShadow(
                              color: AColors.grey,
                              offset: Offset(0, -1),
                            )
                          ]),
                          child: Wrap(
                            direction: Axis.vertical,
                            spacing: 10,
                            children: [
                              ASubTitle(
                                "${_subtitle.callId}: ${widget.request.requestCode}",
                                font: 14,
                              ),
                              ASubTitle(
                                "${_subtitle.assetNumber}: ${widget.request.deviceNumber}",
                                font: 14,
                              ),
                              widget.request.deviceSerialNumber == null
                                  ? const SizedBox()
                                  : ASubTitle(
                                      "${_subtitle.deviceSN}: ${widget.request.deviceSerialNumber}",
                                      font: 14,
                                    ),
                              Text(
                                "${_subtitle.customer}: ${widget.request.hospitalName}",
                                style: Theme.of(context).textTheme.subtitle1.copyWith(
                                      fontWeight: FontWeight.bold,
                                      fontSize: 12,
                                    ),
                                textScaleFactor: AppStyle.getScaleFactor(context),
                              )
                            ],
                          ),
                        ),
                        const SizedBox(height: 8),
                        ASubTitle("Work Order Details"),
                        const SizedBox(height: 8),
                        Container(
                          width: double.infinity,
                          padding: const EdgeInsets.all(16),
                          margin: const EdgeInsets.symmetric(vertical: 16),
                          decoration: BoxDecoration(color: AColors.grey, borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), boxShadow: const [
                            BoxShadow(
                              color: AColors.grey,
                              offset: Offset(0, -1),
                            )
                          ]),
                          child: Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                              // Report type and Reasons
                              // Row(
                              //   children: [
                              //     // Report Status
                              //     // Expanded(
                              //     //   child: Column(
                              //     //     crossAxisAlignment: CrossAxisAlignment.start,
                              //     //     children: [
                              //     //       ASubTitle(_subtitle.reportType),
                              //     //       _validate && _serviceReport.type == null
                              //     //           ? ASubTitle(
                              //     //         _subtitle.requiredWord,
                              //     //         color: Colors.red,
                              //     //       )
                              //     //           : const SizedBox.shrink(),
                              //     //       const SizedBox(
                              //     //         height: 4,
                              //     //       ),
                              //     //       ServiceReportTypeMenu(
                              //     //         initialValue: _serviceReport.type,
                              //     //         onSelect: (status) {
                              //     //           _serviceReport.type = status;
                              //     //         },
                              //     //       ),
                              //     //     ],
                              //     //   ),
                              //     // ),
                              //     // const SizedBox(
                              //     //   width: 8,
                              //     // ),
                              //     // visit date
                              //     Expanded(
                              //       child: Column(
                              //         crossAxisAlignment: CrossAxisAlignment.start,
                              //         children: [
                              //           ASubTitle(_subtitle.visitDate),
                              //           _validate && _serviceReport.visitDate == null
                              //               ? ASubTitle(
                              //                   _subtitle.requiredWord,
                              //                   color: Colors.red,
                              //                 )
                              //               : const SizedBox.shrink(),
                              //           Row(
                              //             children: [
                              //               Expanded(
                              //                 child: ADatePicker(
                              //                   date: _serviceReport.visitDate,
                              //                   from: DateTime.now().subtract(const Duration(days: 365)),
                              //                   to: DateTime.now().add(const Duration(days: 365)),
                              //                   onDatePicker: (date) {
                              //                     _serviceReport.visitDate = date;
                              //                     setState(() {});
                              //                   },
                              //                 ),
                              //               ),
                              //             ],
                              //           ),
                              //         ],
                              //       ),
                              //     ),
                              //   ],
                              // ),
                              // const SizedBox(
                              //   height: 8,
                              // ),
                              // device sn
                              Visibility(
                                visible: widget.request.deviceSerialNumber == null,
                                child: Column(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: [
                                    ASubTitle(_subtitle.deviceSN),
                                    _validate && _serviceReport.device?.id == null
                                        ? ASubTitle(
                                            _subtitle.requiredWord,
                                            color: Colors.red,
                                          )
                                        : const SizedBox.shrink(),
                                    AutoCompleteDeviceField(
                                      hospitalId: widget.request.hospitalId,
                                      initialValue: _serviceReport.device,
                                      onPick: (id) {
                                        _serviceReport.device.id = id;
                                      },
                                    ),
                                    const SizedBox(height: 8),
                                  ],
                                ),
                              ),
                              const SizedBox(height: 8),
                              ASubTitle(_subtitle.assetType),
                              _validate && _serviceReport.assetType == null
                                  ? ASubTitle(
                                      _subtitle.requiredWord,
                                      color: Colors.red,
                                    )
                                  : const SizedBox.shrink(),
                              const SizedBox(
                                height: 4,
                              ),
                              LoadingManager(
                                isLoading: _assetTypeProvider.isLoading,
                                isFailedLoading: _assetTypeProvider.statuses == null,
                                stateCode: _assetTypeProvider.stateCode,
                                onRefresh: () async {
                                  _assetTypeProvider.reset();
                                  await _assetTypeProvider.getTypes(user: _userProvider.user, host: _settingProvider.host);
                                  _serviceReport?.assetType = _assetTypeProvider.statuses?.firstWhere(
                                    (element) => element.value == _callRequestForWorkOrder.assetType,
                                    orElse: () => null,
                                  );
                                },
                                child: ATextFormField(
                                  initialValue: _serviceReport?.assetType?.name ?? "NULL",
                                  textAlign: TextAlign.center,
                                  enable: false,
                                  style: Theme.of(context).textTheme.titleMedium,
                                ),
                              ),
                              // ServiceAssetTypeMenu(
                              //   initialValue: _serviceReport.assetType,
                              //   onSelect: (status) {
                              //     _serviceReport.assetType = status;
                              //   },
                              // ),
                              const SizedBox(
                                height: 8,
                              ),
                              Row(
                                children: [
                                  // report status
                                  Expanded(
                                    child: Column(
                                      crossAxisAlignment: CrossAxisAlignment.start,
                                      children: [
                                        // ASubTitle(_subtitle.reportStatus),
                                        ASubTitle("Equipment Status"),
                                        _validate && _serviceReport.equipmentStatus == null
                                            ? ASubTitle(
                                                _subtitle.requiredWord,
                                                color: Colors.red,
                                              )
                                            : const SizedBox.shrink(),
                                        const SizedBox(
                                          height: 4,
                                        ),
                                        // ServiceReportStatusMenu(
                                        //   report: _serviceReport,
                                        //   request: widget.request,
                                        //   onSelect: (status) {
                                        //     _serviceReport.status = status;
                                        //   },
                                        // ),
                                        ServiceReportEquipmentStatusMenu(
                                          report: _serviceReport,
                                          request: widget.request,
                                          onSelect: (status) {
                                            _serviceReport.equipmentStatus = status;
                                          },
                                        )
                                      ],
                                    ),
                                  ),
                                  const SizedBox(
                                    width: 8,
                                  ),
                                  // Provider.of<ServiceReportLastCallsProvider>(context).isLoading == null
                                  //     ? const SizedBox.shrink():
                                  // Call's last Situation
                                  Consumer<ServiceReportLastCallsProvider>(
                                    builder: (_, provider, __) {
                                      if (provider.isLoading == null) return const SizedBox.shrink();
                                      return Expanded(
                                        child: Column(
                                          crossAxisAlignment: CrossAxisAlignment.start,
                                          children: [
                                            ASubTitle(_subtitle.callLastSituation),
                                            _validate && _serviceReport.callLastSituation == null
                                                ? ASubTitle(
                                                    _subtitle.requiredWord,
                                                    color: Colors.red,
                                                  )
                                                : const SizedBox.shrink(),
                                            const SizedBox(height: 4),
                                            ServiceReportLastCallsMenu(
                                              report: _serviceReport,
                                              onSelect: (status) {
                                                if (status?.value == 12 || _serviceReport.callLastSituation?.value == 12) {
                                                  _serviceReport.callLastSituation = status;
                                                  setState(() {});
                                                } else {
                                                  _serviceReport.callLastSituation = status;
                                                  setState(() {});
                                                }
                                              },
                                            ),
                                          ],
                                        ),
                                      );
                                    },
                                  ),
                                ],
                              ),
                              const SizedBox(
                                height: 8,
                              ),
                              const ASubTitle("Return to Service"),
                              Row(
                                children: [
                                  Expanded(
                                    child: ADatePicker(
                                      date: _serviceReport.returnToService,
                                      from: DateTime.now().subtract(const Duration(days: 365)),
                                      to: DateTime.now().add(const Duration(days: 365)),
                                      onDatePicker: (date) {
                                        _serviceReport.returnToService = date;
                                        setState(() {});
                                      },
                                    ),
                                  ),
                                ],
                              ),
                              if (_serviceReport?.callLastSituation?.value == 2)
                                Column(
                                  children: [
                                    const SizedBox(
                                      height: 8,
                                    ),
                                    ATextFormField(
                                      initialValue: _serviceReport?.reviewComment,
                                      hintText: "Vendor Name",
                                      textAlign: TextAlign.center,
                                      style: Theme.of(context).textTheme.titleMedium,
                                      textInputType: TextInputType.multiline,
                                      onSaved: (value) {
                                        _serviceReport.reviewComment = value;
                                      },
                                    ),
                                    const SizedBox(
                                      height: 8,
                                    ),
                                    ATextFormField(
                                      initialValue: _serviceReport?.reviewComment,
                                      hintText: "Vendor Engineer",
                                      textAlign: TextAlign.center,
                                      style: Theme.of(context).textTheme.titleMedium,
                                      textInputType: TextInputType.multiline,
                                      onSaved: (value) {
                                        _serviceReport.reviewComment = value;
                                      },
                                    ),
                                  ],
                                ),
                              if (_showCommentField)
                                const SizedBox(
                                  height: 8,
                                ),
                              if (_showCommentField)
                                ATextFormField(
                                  initialValue: _serviceReport?.reviewComment,
                                  hintText: "Review Comment",
                                  textAlign: TextAlign.center,
                                  style: Theme.of(context).textTheme.titleMedium,
                                  textInputType: TextInputType.multiline,
                                  onSaved: (value) {
                                    _serviceReport.reviewComment = value;
                                  },
                                ),

                              SizedBox(
                                height: 8 * AppStyle.getScaleFactor(context),
                              ),
                              // const ASubTitle("Assign Employee"),
                              // const SizedBox(
                              //   height: 8,
                              // ),
                              // _validate && _serviceReport.engineer == null
                              //     ? ASubTitle(
                              //         _subtitle.requiredWord,
                              //         color: Colors.red,
                              //       )
                              //     : const SizedBox.shrink(),
                              // const SizedBox(
                              //   height: 4,
                              // ),
                              // EngineersMenu(
                              //   initialValue: _serviceReport.engineer,
                              //   onSelect: (engineer) {
                              //     _serviceReport.engineer = engineer;
                              //   },
                              // ),
                              // const SizedBox(
                              //   height: 8,
                              // ),
                              // Report status and Service Type
                              // Row(
                              //   children: [
                              //     // report status
                              //     Expanded(
                              //       child: Column(
                              //         crossAxisAlignment: CrossAxisAlignment.start,
                              //         children: [
                              //           ASubTitle(_subtitle.reportStatus),
                              //           _validate && _serviceReport.equipmentStatus == null
                              //               ? ASubTitle(
                              //                   _subtitle.requiredWord,
                              //                   color: Colors.red,
                              //                 )
                              //               : const SizedBox.shrink(),
                              //           const SizedBox(
                              //             height: 4,
                              //           ),
                              //           ServiceReportStatusMenu(
                              //             report: _serviceReport,
                              //             request: widget.request,
                              //             onSelect: (status) {
                              //               _serviceReport.equipmentStatus = status;
                              //             },
                              //           ),
                              //         ],
                              //       ),
                              //     ),
                              //     const SizedBox(
                              //       width: 8,
                              //     ),
                              //     Consumer<ServiceReportLastCallsProvider>(
                              //       builder: (_, provider, __) {
                              //         if (provider.isLoading == null) return const SizedBox.shrink();
                              //         return Expanded(
                              //           child: Column(
                              //             crossAxisAlignment: CrossAxisAlignment.start,
                              //             children: [
                              //               ASubTitle(_subtitle.callLastSituation),
                              //               _validate && _serviceReport.callLastSituation == null
                              //                   ? ASubTitle(
                              //                       _subtitle.requiredWord,
                              //                       color: Colors.red,
                              //                     )
                              //                   : const SizedBox.shrink(),
                              //               const SizedBox(
                              //                 height: 4,
                              //               ),
                              //               ServiceReportLastCallsMenu(
                              //                 report: _serviceReport,
                              //                 onSelect: (status) {
                              //                   if (status?.value == 12 || _serviceReport.callLastSituation?.value == 12) {
                              //                     _serviceReport.callLastSituation = status;
                              //                     setState(() {});
                              //                   } else {
                              //                     _serviceReport.callLastSituation = status;
                              //                   }
                              //                 },
                              //               ),
                              //             ],
                              //           ),
                              //         );
                              //       },
                              //     ),
                              //   ],
                              // ),
                              const SizedBox(
                                height: 8,
                              ),
                              // invoice number & code
                              _serviceReport.callLastSituation?.value != 12
                                  ? const SizedBox.shrink()
                                  : Row(
                                      children: [
                                        Expanded(
                                          child: Column(
                                            crossAxisAlignment: CrossAxisAlignment.start,
                                            children: [
                                              ASubTitle(_subtitle.invoiceNumber),
                                              const SizedBox(
                                                height: 8,
                                              ),
                                              ATextFormField(
                                                initialValue: _serviceReport?.invoiceNumber,
                                                textAlign: TextAlign.center,
                                                style: Theme.of(context).textTheme.subtitle1,
                                                validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord,
                                                textInputType: TextInputType.number,
                                                onSaved: (value) {
                                                  _serviceReport.invoiceNumber = value;
                                                },
                                              ),
                                            ],
                                          ),
                                        ),
                                        const SizedBox(
                                          width: 8,
                                        ),
                                        Expanded(
                                          child: Column(
                                            crossAxisAlignment: CrossAxisAlignment.start,
                                            children: [
                                              ASubTitle(_subtitle.invoiceCode),
                                              const SizedBox(
                                                height: 4,
                                              ),
                                              ATextFormField(
                                                initialValue: _serviceReport?.invoiceCode,
                                                textAlign: TextAlign.center,
                                                style: Theme.of(context).textTheme.subtitle1,
                                                validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord,
                                                textInputType: TextInputType.text,
                                                onSaved: (value) {
                                                  _serviceReport.invoiceCode = value;
                                                },
                                              ),
                                            ],
                                          ),
                                        ),
                                      ],
                                    ),

                              // const SizedBox(height: 8,),
                              // Row(
                              //   children: [
                              //     ASubTitle(_subtitle.faultDescription),
                              //     Expanded(
                              //       child: SizedBox(
                              //         height: 32 * AppStyle.getScaleFactor(context),
                              //         child: SpeechToTextButton(
                              //           controller: _faultController,
                              //           mini: true,
                              //         ),
                              //       ),
                              //     ),
                              //   ],
                              // ),
                              // const SizedBox(height: 4,),
                              // ATextFormField(
                              //   initialValue: _serviceReport?.faultDescriptionId,
                              //   textAlign: TextAlign.center,
                              //   controller: _faultController,
                              //   style: Theme.of(context).textTheme.subtitle1,
                              //   validator: (value) =>
                              //   Validator.hasValue(value)
                              //       ? null : _subtitle.requiredWord,
                              //   textInputType: TextInputType.multiline,
                              //   onSaved: (value){
                              //     _serviceReport.faultDescriptionId = value;
                              //   },
                              // ),
                              // const SizedBox(height: 8,),
                              // Row(
                              //   children: [
                              //     ASubTitle(_subtitle.workPreformed),
                              //     Expanded(
                              //       child: SizedBox(
                              //         height: 32 * AppStyle.getScaleFactor(context),
                              //         child: SpeechToTextButton(
                              //           controller: _workPreformedController,
                              //           mini: true,
                              //         ),
                              //       ),
                              //     ),
                              //   ],
                              // ),
                              // const SizedBox(height: 4,),
                              // ATextFormField(
                              //   initialValue: _serviceReport?.workPreformed,
                              //   textAlign: TextAlign.center,
                              //   controller: _workPreformedController,
                              //   style: Theme.of(context).textTheme.subtitle1,
                              //   validator: (value) =>
                              //   Validator.hasValue(value)
                              //       ? null : _subtitle.requiredWord,
                              //   textInputType: TextInputType.multiline,
                              //   onSaved: (value){
                              //     _serviceReport.workPreformed = value;
                              //   },
                              // ),
                              // const SizedBox(height: 8,),
                              const SizedBox(height: 8),
                              ASubTitle(_subtitle.workingHours),
                              const SizedBox(height: 8),
                              Row(
                                children: [
                                  Expanded(
                                    child: AppTimer(
                                      timer: _serviceReport.timer,
                                      enabled: false,
                                      // onChange: (timer) async {
                                      //   _serviceReport.timer = timer;
                                      //   _serviceReport.workingHours = num.tryParse((((timer?.durationInSecond ?? 0) / 60) / 60)?.toStringAsFixed(2) ?? "0");
                                      //   return true;
                                      // },
                                    ),
                                  ),
                                ],
                              ),
                              const SizedBox(height: 16),
                              if (_showCommentField)
                                const SizedBox(
                                  height: 8,
                                ),
                              if (_showCommentField)
                                ATextFormField(
                                  initialValue: _serviceReport?.reviewComment,
                                  hintText: "Review Comment",
                                  textAlign: TextAlign.center,
                                  style: Theme.of(context).textTheme.titleMedium,
                                  textInputType: TextInputType.multiline,
                                  onSaved: (value) {
                                    _serviceReport.reviewComment = value;
                                  },
                                ),
                              SizedBox(
                                height: 8 * AppStyle.getScaleFactor(context),
                              ),
                              const SizedBox(height: 8),
                              ASubTitle(_subtitle.faultDescription),
                              const SizedBox(
                                height: 4,
                              ),
                              ServiceReportFaultDescription(
                                requestId: widget.request?.id,
                                initialValue: _serviceReport.faultDescription,
                                onSelect: (status) {
                                  print("faluttt:${status?.toJson()}");
                                  _serviceReport.faultDescription = status;
                                  if (mounted) setState(() {});
                                },
                              ),
                              const SizedBox(height: 8),
                              const ASubTitle("Solutions"),
                              const SizedBox(height: 4),
                              ATextFormField(
                                initialValue: _serviceReport?.workPreformed,
                                textAlign: TextAlign.center,
                                enable: false,
                                hintText: _serviceReport.faultDescription?.workPerformed ?? "",
                                controller: _workPreformedController,
                                style: Theme.of(context).textTheme.subtitle1,
                                validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord,
                                textInputType: TextInputType.multiline,
                                onSaved: (value) {
                                  //   _serviceReport.workPreformed = value;
                                },
                              ),
                              const SizedBox(height: 4),
                              ASubTitle("Failure Reason"),
                              const SizedBox(
                                height: 4,
                              ),
                              ServiceReportReasonsMenu(
                                initialValue: _serviceReport.reason,
                                onSelect: (status) {
                                  _serviceReport.reason = status;
                                },
                              ),
                              const SizedBox(
                                height: 8,
                              ),
                              ASubTitle(_subtitle.attachImage),
                              const SizedBox(
                                height: 4,
                              ),
                              MultiFilesPicker(
                                label: "",
                                files: _images,
                              ),
                              // AMiniOneImagePicker(
                              //   //error: _validate && _serviceReport.image == null,
                              //   image: _image,
                              //   onPick: (image) {
                              //     _image = image;
                              //     _serviceReport.image = base64Encode(image.readAsBytesSync());
                              //   },
                              // ),
                              const SizedBox(
                                height: 8,
                              ),
                              const SizedBox(height: 8),
                              ASubTitle(_subtitle.repairLocation),
                              const SizedBox(height: 4),
                              ServiceReportRepairLocation(
                                initialValue: _serviceReport.repairLocation,
                                onSelect: (status) {
                                  _serviceReport.repairLocation = status;
                                },
                              ),
                              const SizedBox(height: 16),
                              ASubTitle("Travel Expenses"),
                              const SizedBox(
                                height: 4,
                              ),
                              ATextFormField(
                                initialValue: _serviceReport?.travelingExpense?.toString(),
                                hintText: _subtitle.travelingExpense,
                                textAlign: TextAlign.center,
                                style: Theme.of(context).textTheme.titleMedium,
                                textInputType: TextInputType.number,
                                onSaved: (value) {
                                  if (value != null && value.isEmpty) {
                                    _serviceReport.travelingExpense = int.tryParse(_serviceReport?.travelingExpense?.toString() ?? "") ?? 0;
                                  } else
                                    _serviceReport.travelingExpense = int.tryParse(value) ?? 0;
                                },
                              ),

                              const SizedBox(height: 8),
                              ASubTitle(_subtitle.travelingHours),
                              const SizedBox(height: 4),
                              ATextFormField(
                                initialValue: _serviceReport?.travelingHours?.toString(),
                                textAlign: TextAlign.center,
                                hintText: "i.e 3, 3.5, 4",
                                style: Theme.of(context).textTheme.subtitle1,
                                // validator: (value) =>
                                // Validator.isNumeric(value)
                                //     ? null : _subtitle.requiredWord,
                                textInputType: TextInputType.number,
                                onSaved: (value) {
                                  _serviceReport.travelingHours = double.tryParse(value) ?? 0.0;
                                },
                              ),
                              // Traveling Hours & Working Hours
                              // Row(
                              //   children: [
                              //     Expanded(
                              //       child: Column(
                              //         crossAxisAlignment: CrossAxisAlignment.start,
                              //         children: [
                              //           ASubTitle(_subtitle.workingHours),
                              //           const SizedBox(
                              //             height: 8,
                              //           ),
                              //           Row(
                              //             children: [
                              //               Expanded(
                              //                 child: AppTimer(
                              //                   timer: _serviceReport.timer,
                              //                   onChange: (timer) async {
                              //                     _serviceReport.timer = timer;
                              //                     return true;
                              //                   },
                              //                 ),
                              //               ),
                              //             ],
                              //           ),
                              //           // ATextFormField(
                              //           //   initialValue: _serviceReport?.workHours,
                              //           //   textAlign: TextAlign.center,
                              //           //   hintText: "i.e 3, 3.5, 4",
                              //           //   style: Theme.of(context).textTheme.subtitle1,
                              //           //   validator: (value) =>
                              //           //   Validator.isNumeric(value)
                              //           //       ? null : _subtitle.requiredWord,
                              //           //   textInputType: TextInputType.number,
                              //           //   onSaved: (value){
                              //           //     _serviceReport.workHours = value;
                              //           //   },
                              //           // ),
                              //         ],
                              //       ),
                              //     ),
                              //     // const SizedBox(width: 8,),
                              //     // Expanded(
                              //     //   child: Column(
                              //     //     crossAxisAlignment: CrossAxisAlignment.start,
                              //     //     children: [
                              //     //       ASubTitle(_subtitle.travelingHours),
                              //     //       const SizedBox(height: 4,),
                              //     //       ATextFormField(
                              //     //         initialValue: _serviceReport?.travelingHours,
                              //     //         textAlign: TextAlign.center,
                              //     //         hintText: "i.e 3, 3.5, 4",
                              //     //         style: Theme.of(context).textTheme.subtitle1,
                              //     //         validator: (value) =>
                              //     //         Validator.isNumeric(value)
                              //     //             ? null : _subtitle.requiredWord,
                              //     //         textInputType: TextInputType.number,
                              //     //         onSaved: (value){
                              //     //           _serviceReport.travelingHours = value;
                              //     //         },
                              //     //       ),
                              //     //     ],
                              //     //   ),
                              //     // ),
                              //   ],
                              // ),
                              // const SizedBox(
                              //   height: 8,
                              // ),
                              // Operating Hours and Job Sheet Number
                              // Row(
                              //   children: [
                              //     Expanded(
                              //       child: Column(
                              //         crossAxisAlignment: CrossAxisAlignment.start,
                              //         children: [
                              //           ASubTitle(_subtitle.operatingHours),
                              //           const SizedBox(height: 4,),
                              //           ATextFormField(
                              //             initialValue: _serviceReport?.operatingHours,
                              //             textAlign: TextAlign.center,
                              //             hintText: "i.e 3, 3.5, 4",
                              //             style: Theme.of(context).textTheme.subtitle1,
                              //             validator: (value) =>
                              //             Validator.isNumeric(value)
                              //                 ? null : _subtitle.requiredWord,
                              //             textInputType: TextInputType.number,
                              //             onSaved: (value){
                              //               _serviceReport.operatingHours = value;
                              //             },
                              //           ),
                              //         ],
                              //       ),
                              //     ),
                              //     const SizedBox(width: 8,),
                              //     Expanded(
                              //       child: Column(
                              //         crossAxisAlignment: CrossAxisAlignment.start,
                              //         children: [
                              //           ASubTitle(_subtitle.jobSheetNumber),
                              //           const SizedBox(height: 4,),
                              //           ATextFormField(
                              //             initialValue: _serviceReport?.jobSheetNumber,
                              //             textAlign: TextAlign.center,
                              //             style: Theme.of(context).textTheme.subtitle1,
                              //             textInputType: TextInputType.name,
                              //             onSaved: (value){
                              //               _serviceReport.jobSheetNumber = value;
                              //             },
                              //           ),
                              //         ],
                              //       ),
                              //     ),
                              //   ],
                              // ),
                              //const SizedBox(height: 8,),

                              const SizedBox(height: 8),
                              const ASubTitle("Technical comment"),
                              const SizedBox(height: 4),
                              ATextFormField(
                                initialValue: _serviceReport?.comment,
                                hintText: "Technical Comment",
                                textAlign: TextAlign.center,
                                style: Theme.of(context).textTheme.titleMedium,
                                textInputType: TextInputType.multiline,
                                onSaved: (value) {
                                  _serviceReport.comment = value;
                                },
                              ),
                              const SizedBox(height: 8),
                              const ASubTitle("Nurse Signature"),
                              ESignature(
                                oldSignature: _serviceReport.signatureNurse,
                                newSignature: _serviceReport.localNurseSignature,
                                onSaved: (signature) {
                                  if (signature == null || signature.isEmpty) {
                                    return;
                                  }
                                  _serviceReport.localNurseSignature = signature;
                                  _serviceReport.signatureNurse = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
                                },
                              ),
                              const SizedBox(
                                height: 8,
                              ),
                              const ASubTitle("Engineer Signature"),
                              ESignature(
                                oldSignature: _serviceReport.signatureEngineer,
                                newSignature: _serviceReport.localNurseSignature,
                                onSaved: (signature) {
                                  if (signature == null || signature.isEmpty) {
                                    return;
                                  }
                                  _serviceReport.localNurseSignature = signature;
                                  _serviceReport.signatureEngineer = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
                                },
                              ),
                              const SizedBox(
                                height: 8,
                              ),
                              // Part Number and Quantity
                            ],
                          ),
                        ),
                      ],
                    ),
                    ASubTitle("Spare Parts"),
                    Container(
                      width: double.infinity,
                      padding: const EdgeInsets.all(16),
                      margin: const EdgeInsets.symmetric(vertical: 16),
                      decoration: BoxDecoration(color: AColors.grey, borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), boxShadow: [
                        BoxShadow(
                          color: AColors.grey,
                          offset: Offset(0, -1),
                        )
                      ]),
                      child: Column(
                        mainAxisSize: MainAxisSize.min,
                        children: [
                          Row(
                            children: [
                              Expanded(
                                flex: 3,
                                child: Column(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: [
                                    ASubTitle(_subtitle.partNumberName),
                                    _validate && _serviceReport.parts == null
                                        ? ASubTitle(
                                            _subtitle.requiredWord,
                                            color: Colors.red,
                                          )
                                        : const SizedBox.shrink(),
                                    const SizedBox(
                                      height: 4,
                                    ),
                                    AutoCompletePartsField(
                                      onPick: (part) {
                                        _serviceReport.parts.add(part);
                                        setState(() {});
                                      },
                                    ),
                                  ],
                                ),
                              ),
                            ],
                          ),
                          SizedBox(
                            height: 8 * AppStyle.getScaleFactor(context),
                          ),
                          Row(
                            children: [
                              Expanded(flex: 3, child: Text(_subtitle.number)),
                              Expanded(flex: 1, child: Text(_subtitle.quantity)),
                            ],
                          ),
                          Column(
                            children: List.generate(_serviceReport.parts.length, (index) {
                              Part _part = _serviceReport.parts[index];
                              return PartItem(
                                part: _part,
                                onDelete: (part) {
                                  _serviceReport.parts.remove(part);
                                  setState(() {});
                                },
                              );
                            }),
                          ),
                          const SizedBox(
                            height: 16,
                          ),
                        ],
                      ),
                    ),
                    AButton(
                      text: _subtitle.update,
                      onPressed: () async {
                        if (_serviceReport?.workingHours == null) {
                          await Fluttertoast.showToast(msg: "Working Hours Timer Isn't Started");
                          return;
                        }
                        _validate = true;
                        // if (!_formKey.currentState.validate()) {
                        //   setState(() {});
                        //   return;
                        // }
                        // print("jere124");
                        // if (!_serviceReport.validate()) {
                        //   setState(() {});
                        //   return;
                        // }
                        // print("jere14");
                        _formKey.currentState.save();

                        _isLoading = true;
                        setState(() {});
                        _serviceReport.image = _images.map((e) => base64Encode(e.readAsBytesSync())).toList();
                        int status = await _serviceRequestsProvider.updateServiceReport(user: _userProvider.user, host: _settingProvider.host, report: _serviceReport, request: widget.request);
                        _isLoading = false;
                        setState(() {});
                        if (status >= 200 && status < 300) {
                          Fluttertoast.showToast(
                            msg: _subtitle.requestCompleteSuccessfully,
                          );
                          Navigator.of(context).pop();
                          Navigator.of(context).pop();
                        } else {
                          String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle);
                          ScaffoldMessenger.of(context).showSnackBar(SnackBar(
                            content: Text(errorMessage),
                          ));
                        }
                      },
                    ),
                  ],
                ),
                const ABackButton(),
              ],
            ),
          ),
        ),
      ),
    );
  }
}
