import 'package:barcode_scan/platform_wrapper.dart';
import 'package:driverapp/config/size_config.dart';
import 'package:driverapp/core/enum/viewstate.dart';
import 'package:driverapp/core/model/scan_qr/scan_qr_request_model.dart';
import 'package:driverapp/core/viewModels/orders_view_model.dart';
import 'package:driverapp/pages/delivery/information_page.dart';
import 'package:driverapp/pages/orders/pending_orders_page.dart';
import 'package:driverapp/uitl/app_toast.dart';
import 'package:driverapp/uitl/translations_delegate_base.dart';
import 'package:driverapp/uitl/utils.dart';
import 'package:driverapp/widgets/data_display/circle-container.dart';
import 'package:driverapp/widgets/others/app_scaffold_widget.dart';
import 'package:driverapp/widgets/others/network_base_view.dart';
import 'package:driverapp/widgets/others/rounded_container.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';

import '../base/base_view.dart';

class DashboardScreen extends StatefulWidget {
  @override
  _DashboardScreenState createState() => _DashboardScreenState();
}

class _DashboardScreenState extends State<DashboardScreen> {
  @override
  Widget build(BuildContext context) {
    int orderId;
    return BaseView<OrdersViewModel>(
      onModelReady: (model) => model.getPendingOrders(),
      builder: (BuildContext context, OrdersViewModel model, Widget child) =>
          AppScaffold(
        body: Container(
          height: MediaQuery.of(context).size.height * .95,
          child: ListView(
            children: <Widget>[
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: <Widget>[
                  Padding(
                    padding: EdgeInsets.all(16.0),
                    child: Column(
                      children: <Widget>[
                        SafeArea(
                          child: Column(
                            mainAxisAlignment: MainAxisAlignment.start,
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: <Widget>[
                              Text(
                                TranslationBase.of(context).haveGreatDay,
                                style: TextStyle(
                                    fontSize: 14.5,
                                    color: Color(0xff636363),
                                    fontWeight: FontWeight.w300),
                              ),
                              Padding(
                                padding: EdgeInsets.only(top: 4.5),
                                child: Text(
                                  'Drive Name',
                                  //model.user.userName,
                                  style: TextStyle(
                                      fontWeight: FontWeight.w400,
                                      fontSize: 25.0),
                                ),
                              ),
                            ],
                          ),
                        ),
                      ],
                    ),
                  ),
                  Padding(
                    padding: EdgeInsets.all(16.0),
                    child: SafeArea(
                      child: Column(
                        children: <Widget>[
                          CircleAvatar(
                            radius: 25.5,
                            backgroundColor: Color(0xff30B7B9),
                            child: CircleAvatar(
                              backgroundColor: Color(0xff30B7B9),
                              maxRadius: 26.0,
                              child: Image.asset(
                                'assets/images/driver.png',
                                fit: BoxFit.contain,
                              ),
                            ),
                          ),
                        ],
                      ),
                    ),
                  ),
                ],
              ),
              Row(
                children: <Widget>[
                  Expanded(
                    child: Column(
                      children: <Widget>[
                        Padding(
                          padding: EdgeInsets.symmetric(horizontal: 10.0),
                          child: Container(
                            height: MediaQuery.of(context).orientation ==
                                    Orientation.portrait
                                ? MediaQuery.of(context).size.height * 0.16
                                : MediaQuery.of(context).size.height * 0.30,
                            width: MediaQuery.of(context).size.width * 0.44,
                            decoration: BoxDecoration(
                              borderRadius: BorderRadius.circular(15.0),
                              gradient: LinearGradient(colors: [
                                Color(0xff17AFB8),
                                Color(0xff49C1BC)
                              ]),
                            ),
                            child: Row(
                              mainAxisAlignment: MainAxisAlignment.spaceBetween,
                              children: <Widget>[
                                Expanded(
                                  child: Padding(
                                    padding: EdgeInsets.all(2.0),
                                    child: Column(
                                      mainAxisAlignment:
                                          MainAxisAlignment.spaceEvenly,
                                      children: <Widget>[
                                        Text(
                                          TranslationBase.of(context).youHave,
                                          style: TextStyle(
                                              color: Colors.white,
                                              fontSize:
                                                  SizeConfig.textMultiplier *
                                                      2.2),
                                        ),
                                        Text(
                                          '5',
                                          style: TextStyle(
                                              color: Colors.white,
                                              fontSize:
                                                  SizeConfig.textMultiplier *
                                                      4.0),
                                        ),
                                        Text(
                                          TranslationBase.of(context)
                                              .undeliveredPackages,
                                          style: TextStyle(
                                              color: Colors.white,
                                              fontSize:
                                                  SizeConfig.textMultiplier *
                                                      2.2),
                                        )
                                      ],
                                    ),
                                  ),
                                ),
                                Padding(
                                  padding: EdgeInsets.only(right: 9.5),
                                  child: Container(
                                    width: 110,
                                    height: 110,
                                    decoration: BoxDecoration(
                                        color: Colors.white10,
                                        shape: BoxShape.circle),
                                    child: Column(
                                      mainAxisAlignment:
                                          MainAxisAlignment.center,
                                      children: <Widget>[
                                        Image.asset(
                                          'assets/images/closed_box.png',
                                          height: MediaQuery.of(context)
                                                      .orientation ==
                                                  Orientation.portrait
                                              ? MediaQuery.of(context)
                                                      .size
                                                      .height *
                                                  0.10
                                              : MediaQuery.of(context)
                                                      .size
                                                      .height *
                                                  0.20,
                                          width: MediaQuery.of(context)
                                                  .size
                                                  .width *
                                              0.20,
                                          scale: 0.9,
                                          fit: BoxFit.contain,
                                        ),
                                      ],
                                    ),
                                  ),
                                ),
                              ],
                            ),
                          ),
                        )
                      ],
                    ),
                  ),
                  Expanded(
                    child: Column(
                      children: <Widget>[
                        Padding(
                          padding: EdgeInsets.symmetric(horizontal: 10.0),
                          child: Container(
                            height: MediaQuery.of(context).orientation ==
                                    Orientation.portrait
                                ? MediaQuery.of(context).size.height * 0.16
                                : MediaQuery.of(context).size.height * 0.30,
                            width: MediaQuery.of(context).size.width * 0.45,
                            decoration: BoxDecoration(
                              borderRadius: BorderRadius.circular(15.0),
                              gradient: LinearGradient(colors: [
                                Color(0xff17AFB8),
                                Color(0xff49C1BC)
                              ]),
                            ),
                            child: Row(
                              mainAxisAlignment: MainAxisAlignment.spaceBetween,
                              children: <Widget>[
                                Expanded(
                                  child: Padding(
                                    padding: EdgeInsets.all(2.0),
                                    child: Column(
                                      mainAxisAlignment:
                                          MainAxisAlignment.spaceEvenly,
                                      children: <Widget>[
                                        Text(
                                          TranslationBase.of(context).youHave,
                                          style: TextStyle(
                                              color: Colors.white,
                                              fontSize:
                                                  SizeConfig.textMultiplier *
                                                      2.2),
                                        ),
                                        Text(
                                          '25',
                                          style: TextStyle(
                                              color: Colors.white,
                                              fontSize:
                                                  SizeConfig.textMultiplier *
                                                      4.0),
                                        ),
                                        Text(
                                          TranslationBase.of(context)
                                              .deliveredPackages,
                                          style: TextStyle(
                                              color: Colors.white,
                                              fontSize:
                                                  SizeConfig.textMultiplier *
                                                      2.2),
                                        )
                                      ],
                                    ),
                                  ),
                                ),
                                Padding(
                                  padding: EdgeInsets.only(right: 9.5),
                                  child: Container(
                                    width: 110,
                                    height: 110,
                                    decoration: BoxDecoration(
                                        color: Colors.white10,
                                        shape: BoxShape.circle),
                                    child: Column(
                                      mainAxisAlignment:
                                          MainAxisAlignment.center,
                                      children: <Widget>[
                                        Image.asset(
                                          'assets/images/opend_box.png',
                                          height: MediaQuery.of(context)
                                                      .orientation ==
                                                  Orientation.portrait
                                              ? MediaQuery.of(context)
                                                      .size
                                                      .height *
                                                  0.10
                                              : MediaQuery.of(context)
                                                      .size
                                                      .height *
                                                  0.20,
                                          width: MediaQuery.of(context)
                                                  .size
                                                  .width *
                                              0.20,
                                          scale: 0.9,
                                          fit: BoxFit.contain,
                                        ),
                                      ],
                                    ),
                                  ),
                                ),
                              ],
                            ),
                          ),
                        )
                      ],
                    ),
                  ),
                ],
              ),
              Padding(
                padding: EdgeInsets.symmetric(vertical: 16.0, horizontal: 15.0),
                child: Row(
                  children: <Widget>[
                    Expanded(
                      child: InkWell(
                        child: Container(
                          height: MediaQuery.of(context).orientation ==
                                  Orientation.portrait
                              ? MediaQuery.of(context).size.height * 0.18
                              : MediaQuery.of(context).size.height * 0.30,
                          width: MediaQuery.of(context).size.width * 0.50,
                          decoration: BoxDecoration(
                            borderRadius: BorderRadius.circular(15.0),
                            gradient: LinearGradient(
                              colors: [
                                Hexcolor("#45B7AE"),
                                Hexcolor("#119FA9")
                              ],
                            ),
                          ),
                          child: Row(
                            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                            children: <Widget>[
                              Column(
                                mainAxisAlignment: MainAxisAlignment.center,
                                children: <Widget>[
                                  Image.asset(
                                    'assets/images/qr_code.png',
                                    width: MediaQuery.of(context).size.width *
                                        0.26,
                                    height: MediaQuery.of(context)
                                                .orientation ==
                                            Orientation.portrait
                                        ? MediaQuery.of(context).size.height *
                                            0.14
                                        : MediaQuery.of(context).size.height *
                                            0.28,
                                    fit: BoxFit.contain,
                                  )
                                ],
                              ),
                              Column(
                                mainAxisAlignment:
                                    MainAxisAlignment.spaceEvenly,
                                crossAxisAlignment: CrossAxisAlignment.start,
                                children: <Widget>[
                                  InkWell(
                                    onTap: () {
                                      _scanQrAndGetPatient(context, model);
                                    },
                                    child: Padding(
                                      padding: EdgeInsets.only(top: 8.0),
                                      child: Text(
                                        TranslationBase.of(context).scan,
                                        style: TextStyle(
                                          fontSize:
                                              SizeConfig.textMultiplier * 6.0,
                                          color: Colors.white,
                                          fontWeight: FontWeight.w400,
                                        ),
                                      ),
                                    ),
                                  ),
                                  Padding(
                                    padding: EdgeInsets.only(top: 0.0),
                                    child: Text(
                                      TranslationBase.of(context)
                                          .toAddPackageToQue,
                                      style: TextStyle(
                                        fontSize:
                                            SizeConfig.textMultiplier * 3.0,
                                        color: Colors.white,
                                        letterSpacing: 0.2,
                                        wordSpacing: 0.5,
                                      ),
                                    ),
                                  ),
                                ],
                              )
                            ],
                          ),
                        ),
                      ),
                    )
                  ],
                ),
              ),
              NetworkBaseView(
                baseViewModel: model,
                child: Padding(
                  padding:
                      EdgeInsets.symmetric(horizontal: 20.0, vertical: 1.0),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: <Widget>[
                      Column(
                        children: <Widget>[
                          Text(
                            TranslationBase.of(context).nearestDropOffs,
                            style: TextStyle(
                              fontSize: 21.0,
                              fontWeight: FontWeight.w400,
                            ),
                          ),
                        ],
                      ),
                      Column(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: <Widget>[
                          InkWell(
                            child: Row(
                              children: <Widget>[
                                Text(
                                  TranslationBase.of(context).seeAll,
                                  style: TextStyle(
                                      fontSize: 14.5, color: Color(0xff42B6AD)),
                                ),
                                Icon(
                                  Icons.arrow_forward_ios,
                                  size: 15.0,
                                  color: Color(0xff42B6AD),
                                ),
                              ],
                            ),
                            onTap: () => Navigator.push(
                              context,
                              MaterialPageRoute(
                                  builder: (context) => OrdersListScreen()),
                            ),
                          ),
                        ],
                      ),
                    ],
                  ),
                ),
              ),
              NetworkBaseView(
                baseViewModel: model,
                child: Expanded(
                  child: ListView.builder(
                    shrinkWrap: true,
                    scrollDirection: Axis.vertical,
                    itemCount: model.orders == null
                        ? 0
                        : model.orders.length < 3 ? model.orders.length : 3,
                    itemBuilder: (BuildContext context, int index) {
                      return Padding(
                        padding: EdgeInsets.symmetric(horizontal: 12.2),
                        child: InkWell(
                          child: RoundedContainer(
                            raduis: 25.0,
                            height: MediaQuery.of(context).orientation ==
                                    Orientation.portrait
                                ? MediaQuery.of(context).size.height * 0.109
                                : MediaQuery.of(context).size.height * 0.209,
                            child: Row(
                              mainAxisAlignment: MainAxisAlignment.spaceBetween,
                              children: <Widget>[
                                Expanded(
                                  flex: 1,
                                  child: Column(
                                    mainAxisAlignment: MainAxisAlignment.start,
                                    crossAxisAlignment:
                                        CrossAxisAlignment.start,
                                    children: <Widget>[
                                      Padding(
                                        padding: EdgeInsets.only(
                                            left: 15.0, top: 14.0),
                                        child: Image.asset(
                                          'assets/images/location.png',
                                          height: MediaQuery.of(context)
                                                      .orientation ==
                                                  Orientation.portrait
                                              ? MediaQuery.of(context)
                                                      .size
                                                      .height *
                                                  0.06
                                              : MediaQuery.of(context)
                                                      .size
                                                      .height *
                                                  0.11,
                                          width: MediaQuery.of(context)
                                                      .orientation ==
                                                  Orientation.portrait
                                              ? MediaQuery.of(context)
                                                      .size
                                                      .width *
                                                  0.05
                                              : MediaQuery.of(context)
                                                      .size
                                                      .width *
                                                  0.09,
                                        ),
                                      )
                                    ],
                                  ),
                                ),
                                if (model.orders.length != 0)
                                  Expanded(
                                    flex: 5,
                                    child: Column(
                                      crossAxisAlignment:
                                          CrossAxisAlignment.start,
                                      children: <Widget>[
                                        Padding(
                                          padding: EdgeInsets.only(top: 20.0),
                                          child: Text(
                                            model.orders[index].firstName +
                                                ' ' +
                                                model.orders[index].lastName,
                                            style: TextStyle(fontSize: 18.0),
                                          ),
                                        ),
                                        Text(
                                          model.orders[index].mobileNumber,
                                          style: TextStyle(
                                            color: Color(0xff30B7B9),
                                            fontWeight: FontWeight.w600,
                                            fontSize: 15.0,
                                          ),
                                        ),
                                      ],
                                    ),
                                  ),
                                Padding(
                                  padding: EdgeInsets.all(8.0),
                                  child: CircleContainer(
                                    child: Text(
                                      model.orders[index].distanceInKilometers
                                              .toString() +
                                          ' K.m\naway',
                                      style: TextStyle(
                                          color: Color(0xff42B6AD),
                                          fontWeight: FontWeight.w800,
                                          fontStyle: FontStyle.normal),
                                    ),
                                  ),
                                ),
                              ],
                            ),
                          ),
                          onTap: () {
                            Navigator.push(
                                context,
                                MaterialPageRoute(
                                    builder: (context) =>
                                        InformationPage(model.orders[index])));
                          },
                        ),
                      );
                    },
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }

  _scanQrAndGetPatient(BuildContext context, OrdersViewModel model) async {
    /// When give qr we will change this method to get data
    /// var result = await BarcodeScanner.scan();
    /// int patientID = get from qr result
    var result = await BarcodeScanner.scan();
    //  if (result.rawContent == "") {
    List<String> listOfParams = result.rawContent.split(',');
    ScanQrRequestModel _scanQrRequestModel = ScanQrRequestModel(
        deliveryOrderID: int.parse(listOfParams[0]), groupID: 0);
    String patientType = "1";
    await model.insertOrder(_scanQrRequestModel);
    if (model.state == ViewState.ErrorLocal) {
      Utils.showErrorToast(model.error);
    } else {
      AppToast.showSuccessToast(message: "Order Added");
    }
  }
}
