import 'package:hmg_patient_app/core/enum/OrderService.dart';
import 'package:hmg_patient_app/core/model/er/PatientER.dart';
import 'package:hmg_patient_app/core/model/er/PatientER_RC.dart';
import 'package:hmg_patient_app/core/model/er/get_all_transportation_method_list_model.dart';
import 'package:hmg_patient_app/core/viewModels/er/am_request_view_model.dart';
import 'package:hmg_patient_app/core/viewModels/project_view_model.dart';
import 'package:hmg_patient_app/theme/colors.dart';
import 'package:hmg_patient_app/uitl/translations_delegate_base.dart';
import 'package:hmg_patient_app/uitl/utils_new.dart';
import 'package:hmg_patient_app/widgets/buttons/defaultButton.dart';
import 'package:hmg_patient_app/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:provider/provider.dart';

enum Direction { ToHospital, FromHospital }

enum Way { OneWay, TwoWays }

class SelectTransportationMethod extends StatefulWidget {
  final Function changeCurrentTab;
  final PatientER patientER;
  final PatientER_RC patientER_RC;
  final AmRequestViewModel amRequestViewModel;

  SelectTransportationMethod({Key? key, required this.changeCurrentTab, required this.patientER, required this.patientER_RC, required this.amRequestViewModel});

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

class _SelectTransportationMethodState extends State<SelectTransportationMethod> {
  PatientERTransportationMethod _erTransportationMethod = PatientERTransportationMethod();
  Direction _direction = Direction.FromHospital;
  Way _way = Way.OneWay;

  OrderService _orderService = OrderService.AMBULANCE;

  @override
  void initState() {
    super.initState();
    // if (widget.patientER.direction != null) {
    //   _direction = widget.patientER.direction == 0 ? Direction.ToHospital : Direction.FromHospital;
    //   _way = widget.patientER.tripType == 1 ? Way.OneWay : Way.TwoWays;
    //   _erTransportationMethod = widget.amRequestViewModel.amRequestModeList[(widget.patientER.selectedAmbulate - 1)];
    // } else {
    //   if (widget.amRequestViewModel.amRequestModeList.length != 0) _erTransportationMethod = widget.amRequestViewModel.amRequestModeList[widget.amRequestViewModel.amRequestModeList.length - 1];
    // }

    //RC API Revamp
    if (widget.patientER_RC.transportationDetails!.direction != null) {
      _direction = widget.patientER_RC.transportationDetails!.direction == 0 ? Direction.ToHospital : Direction.FromHospital;
      _way = widget.patientER_RC.transportationDetails!.tripType == 1 ? Way.OneWay : Way.TwoWays;
      _erTransportationMethod = widget.amRequestViewModel.amRequestModeList[(widget.patientER_RC.transportationDetails!.ambulate! - 1)];
    } else {
      if (widget.amRequestViewModel.amRequestModeList.length != 0) _erTransportationMethod = widget.amRequestViewModel.amRequestModeList[widget.amRequestViewModel.amRequestModeList.length - 1];
    }
  }

  @override
  Widget build(BuildContext context) {
    ProjectViewModel projectViewModel = Provider.of(context);
    return AppScaffold(
      isShowAppBar: false,
      isShowDecPage: false,
      body: SingleChildScrollView(
        physics: BouncingScrollPhysics(),
        child: Container(
          margin: EdgeInsets.only(left: 12, right: 12),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              SizedBox(
                height: 12,
              ),
              Text(TranslationBase.of(context).transportHeading, style: TextStyle(fontSize: 16.0, letterSpacing: -0.64, fontWeight: FontWeight.w600)),
              Container(
                margin: EdgeInsets.only(top: 12),
                decoration: cardRadius(12),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    ...List.generate(
                      widget.amRequestViewModel.amRequestModeList.length,
                      (index) => InkWell(
                        onTap: () {
                          setState(() {
                            _erTransportationMethod = widget.amRequestViewModel.amRequestModeList[index];
                          });
                        },
                        child: Container(
                          child: Row(
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            children: [
                              Expanded(
                                flex: 4,
                                child: ListTile(
                                  contentPadding: EdgeInsets.only(left: 0.0, right: 0.0),
                                  title: Row(
                                    children: [
                                      Radio(
                                        value: widget.amRequestViewModel.amRequestModeList[index],
                                        groupValue: _erTransportationMethod,
                                        onChanged: (value) {
                                          setState(() {
                                            _erTransportationMethod = value!;
                                          });
                                        },
                                      ),
                                      Flexible(
                                        child: Text(
                                          projectViewModel.isArabic ? widget.amRequestViewModel.amRequestModeList[index].textN! : widget.amRequestViewModel.amRequestModeList[index].text!,
                                          style: TextStyle(
                                            fontSize: 12.0,
                                            letterSpacing: -0.48,
                                            fontWeight: FontWeight.w600,
                                          ),
                                        ),
                                      ),
                                    ],
                                  ),
                                ),
                              ),
                              Expanded(
                                flex: 1,
                                child: Row(
                                  children: [
                                    projectViewModel.isArabic ? Container() : SvgPicture.asset("assets/images/new/Saudi_Riyal_Symbol.svg", width: 16, height: 16),
                                    mWidth(6),
                                    Text(
                                      ' ${widget.amRequestViewModel.amRequestModeList[index].priceTotal}',
                                      style: TextStyle(
                                        fontSize: 12.0,
                                        letterSpacing: -0.48,
                                        fontWeight: FontWeight.w600,
                                      ),
                                    ),
                                    mWidth(6),
                                    projectViewModel.isArabic ? SvgPicture.asset("assets/images/new/Saudi_Riyal_Symbol.svg", width: 16, height: 16) : Container(),
                                  ],
                                ),
                              )
                            ],
                          ),
                        ),
                      ),
                    ),
                  ],
                ),
              ),
              SizedBox(
                height: 12,
              ),
              Text(TranslationBase.of(context).directionHeading, style: TextStyle(fontSize: 16.0, letterSpacing: -0.64, fontWeight: FontWeight.w600)),
              Container(
                width: double.maxFinite,
                child: Row(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  mainAxisAlignment: MainAxisAlignment.start,
                  children: [
                    Expanded(
                      child: InkWell(
                        onTap: () {
                          setState(() {
                            _direction = Direction.ToHospital;
                          });
                        },
                        child: Container(
                          width: double.maxFinite,
                          child: ListTile(
                            contentPadding: EdgeInsets.only(left: 0.0, right: 0.0),
                            title: Row(
                              children: [
                                Radio(
                                  value: Direction.ToHospital,
                                  groupValue: _direction,
                                  onChanged: (value) {
                                    setState(() {
                                      _direction = value!;
                                    });
                                  },
                                ),
                                Text(TranslationBase.of(context).toHospital,
                                    style: TextStyle(
                                      fontSize: 12.0,
                                      letterSpacing: -0.48,
                                      fontWeight: FontWeight.w600,
                                    )),
                              ],
                            ),
                          ),
                        ),
                      ),
                    ),
                    Expanded(
                      child: InkWell(
                        onTap: () {
                          setState(() {
                            _direction = Direction.FromHospital;
                          });
                        },
                        child: Container(
                          width: double.maxFinite,
                          child: ListTile(
                            contentPadding: EdgeInsets.only(left: 0.0, right: 0.0),
                            title: Row(
                              children: [
                                Radio(
                                  value: Direction.FromHospital,
                                  groupValue: _direction,
                                  onChanged: (value) {
                                    setState(() {
                                      _direction = value!;
                                    });
                                  },
                                ),
                                Text(TranslationBase.of(context).fromHospital,
                                    style: TextStyle(
                                      fontSize: 12.0,
                                      letterSpacing: -0.48,
                                      fontWeight: FontWeight.w600,
                                    )),
                              ],
                            ),
                          ),
                        ),
                      ),
                    ),
                  ],
                ),
              ),
              if (_direction == Direction.ToHospital)
                Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    SizedBox(
                      height: 8,
                    ),
                    Text(TranslationBase.of(context).wayHeading, style: TextStyle(fontSize: 16.0, letterSpacing: -0.64, fontWeight: FontWeight.w600)),
                    SizedBox(
                      height: 5,
                    ),
                    Container(
                      child: Row(
                        children: [
                          Expanded(
                            child: InkWell(
                              onTap: () {
                                setState(() {
                                  _way = Way.OneWay;
                                });
                              },
                              child: Container(
                                child: ListTile(
                                  contentPadding: EdgeInsets.only(left: 0.0, right: 0.0),
                                  title: Row(
                                    children: [
                                      Radio(
                                        value: Way.OneWay,
                                        groupValue: _way,
                                        onChanged: (value) {
                                          setState(() {
                                            _way = value!;
                                          });
                                        },
                                      ),
                                      Text(TranslationBase.of(context).oneDirec,
                                          style: TextStyle(
                                            fontSize: 12.0,
                                            letterSpacing: -0.48,
                                            fontWeight: FontWeight.w600,
                                          )),
                                    ],
                                  ),
                                ),
                              ),
                            ),
                          ),
                          Expanded(
                            child: InkWell(
                              onTap: () {
                                setState(() {
                                  _way = Way.TwoWays;
                                });
                              },
                              child: Container(
                                child: ListTile(
                                  contentPadding: EdgeInsets.only(left: 0.0, right: 0.0),
                                  title: Row(
                                    children: [
                                      Radio(
                                        value: Way.TwoWays,
                                        groupValue: _way,
                                        onChanged: (value) {
                                          setState(() {
                                            _way = value!;
                                          });
                                        },
                                      ),
                                      Text(
                                        TranslationBase.of(context).twoDirec,
                                        style: TextStyle(
                                          fontSize: 12.0,
                                          letterSpacing: -0.48,
                                          fontWeight: FontWeight.w600,
                                        ),
                                      ),
                                    ],
                                  ),
                                ),
                              ),
                            ),
                          ),
                        ],
                      ),
                    ),
                    // SizedBox(
                    //   height: 30,
                    // ),
                  ],
                ),
              Container(
                margin: EdgeInsets.only(top: 12),
                decoration: cardRadius(12),
                padding: EdgeInsets.all(16.0),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Text(TranslationBase.of(context).billAmount + " : ", style: TextStyle(fontSize: 16.0, letterSpacing: -0.64, fontWeight: FontWeight.w600)),
                    SizedBox(height: 16.0),
                    Row(
                      mainAxisSize: MainAxisSize.max,
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        Text(TranslationBase.of(context).patientShareTotalToDo, style: TextStyle(fontSize: 13.0, letterSpacing: -0.64, fontWeight: FontWeight.w600)),
                        Row(
                          children: [
                            projectViewModel.isArabic ? Container() : SvgPicture.asset("assets/images/new/Saudi_Riyal_Symbol.svg", width: 16, height: 16),
                            mWidth(6),
                            Text(
                              (_way == Way.OneWay ? ' ${_erTransportationMethod.priceTotal}' : ' ${(_erTransportationMethod.priceTotal * 2)}'),
                              style: TextStyle(fontSize: 16.0, letterSpacing: -0.64, fontWeight: FontWeight.bold),
                            ),
                            mWidth(6),
                            projectViewModel.isArabic ? SvgPicture.asset("assets/images/new/Saudi_Riyal_Symbol.svg", width: 16, height: 16) : Container(),
                          ],
                        ),
                      ],
                    )
                  ],
                ),
              ),
              SizedBox(
                height: 100,
              ),
            ],
          ),
        ),
      ),
      bottomSheet: Container(
        color: Theme.of(context).scaffoldBackgroundColor,
        padding: EdgeInsets.all(12.0),
        child: Row(
          children: [
            Expanded(
                flex: 1,
                child: DefaultButton(
                  TranslationBase.of(context).back,
                  () {
                    Navigator.pop(context);
                  },
                )),
            SizedBox(width: 12.0),
            Expanded(
              flex: 1,
              child: DefaultButton(
                TranslationBase.of(context).next,
                () {
                  setState(() {
                    // widget.patientER.transportationMethodId = (widget.amRequestViewModel.amRequestModeList.indexOf(_erTransportationMethod) + 1);
                    // widget.patientER.direction = _direction == Direction.ToHospital ? 1 : 0;
                    // widget.patientER.tripType = _way == Way.TwoWays ? 0 : 1;
                    // widget.patientER.selectedAmbulate = (widget.amRequestViewModel.amRequestModeList.indexOf(_erTransportationMethod) + 1);
                    // widget.patientER.patientERTransportationMethod = _erTransportationMethod;
                    // widget.patientER.orderServiceID = _orderService.getIdOrderService();
                    // widget.patientER.pickupUrgency = 1;
                    // widget.patientER.lineItemNo = 1;
                    // widget.patientER.cost = _erTransportationMethod.price.toDouble();
                    // widget.patientER.vAT = _erTransportationMethod.priceVAT ?? 0;
                    // widget.patientER.totalPrice = _erTransportationMethod.priceTotal.toDouble();
                    // widget.changeCurrentTab(1);

                    // widget.patientER_RC.transportationDetails.id = (widget.amRequestViewModel.amRequestModeList.indexOf(_erTransportationMethod) + 1);
                    widget.patientER_RC.transportationDetails!.direction = _direction == Direction.ToHospital ? 0 : 1;
                    widget.patientER_RC.transportationDetails!.tripType = _way == Way.TwoWays ? 0 : 1;
                    widget.patientER_RC.transportationDetails!.ambulate = (widget.amRequestViewModel.amRequestModeList.indexOf(_erTransportationMethod) + 1);
                    widget.patientER_RC.transportationDetails!.transportationType = _erTransportationMethod.iD.toString();
                    widget.patientER_RC.patientERTransportationMethod = _erTransportationMethod;
                    widget.patientER_RC.transportationDetails!.pickupUrgency = 1;
                    // widget.patientER.orderServiceID = _orderService.getIdOrderService();
                    // widget.patientER.lineItemNo = 1;
                    // widget.patientER.cost = _erTransportationMethod.price.toDouble();
                    // widget.patientER.vAT = _erTransportationMethod.priceVAT ?? 0;
                    // widget.patientER.totalPrice = _erTransportationMethod.priceTotal.toDouble();
                    widget.changeCurrentTab(1);
                  });
                },
                color: CustomColors.green,
              ),
            ),
          ],
        ),
      ),
    );
  }
}
