import 'dart:async';
import 'dart:io';

import 'package:amap_location_flutter_plugin/amap_location_flutter_plugin.dart';
import 'package:chewie/chewie.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:image_picker/image_picker.dart';
import 'package:liftmanager/internal/account/provider/user_provider.dart';
import 'package:liftmanager/internal/bbs/bbs_router.dart';
import 'package:liftmanager/internal/bbs/model/liftcase_model.dart';
import 'package:liftmanager/internal/wode/order_const.dart';
import 'package:liftmanager/internal/wode/page/order_master/check.dart';
import 'package:liftmanager/internal/wode/wode_router.dart';
import 'package:liftmanager/net/api_service.dart';
import 'package:liftmanager/res/colors.dart';
import 'package:liftmanager/routers/fluro_navigator.dart';
import 'package:liftmanager/utils/fast_notification.dart';
import 'package:liftmanager/utils/oss_upload.dart';
import 'package:liftmanager/utils/theme_utils.dart';
import 'package:liftmanager/utils/time_format.dart';
import 'package:liftmanager/utils/toast.dart';
import 'package:liftmanager/utils/utils.dart';
import 'package:liftmanager/widgets/app_bar.dart';
import 'package:liftmanager/widgets/bbs_content.dart';
import 'package:liftmanager/widgets/load_image.dart';
import 'package:liftmanager/widgets/selected_video_change.dart';
import 'package:orientation/orientation.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import 'package:video_player/video_player.dart';

class OrderDetailMaster extends StatefulWidget {
  OrderDetailMaster(this.id);

  final String id;
  @override
  State<StatefulWidget> createState() {
    return OrderDetailMasterState();
  }
}

class OrderDetailMasterState extends State<OrderDetailMaster>
    with AutomaticKeepAliveClientMixin {
  UserProvider provider = UserProvider();

  bool _hasData = false;
  LiftCasesDetailModel detailObj;
  double totalPay;

  String videoUrl;
  String str;
  String imagesUrl;
  double percent = 0.0;

  var latitude;
  var longitude;
  String address;
  Map<String, Object> _locationResult;
  StreamSubscription<Map<String, Object>> _locationListener;
  AmapLocationFlutterPlugin _locationPlugin = new AmapLocationFlutterPlugin();

  getBrandDetail() {
    // showLoading(context);
    NewApiService().getLiftcaseDetail(widget.id, onSuccess: (res) {
      detailObj = res;
      print("获取详情成功");
      if (_controllerBefore == null && detailObj.beforeRepair != null) {
        _controllerBefore?.pause();
        _controllerBefore?.dispose();
        _controllerBefore = VideoPlayerController.network(
            Utils.getImagePath(detailObj.beforeRepair));
      }
      if (_controllerAfter == null && detailObj.afterRepair != null) {
        _controllerAfter?.pause();
        _controllerAfter?.dispose();
        _controllerAfter = VideoPlayerController.network(
            Utils.getImagePath(detailObj.afterRepair));
      }
      double serviceCost =
          detailObj.serviceCost != null ? detailObj.serviceCost : 0.0;
      double travelCost =
          detailObj.travelCost != null ? detailObj.travelCost : 0.0;
      double couponDeduction =
          detailObj.couponDeduction != null ? detailObj.couponDeduction : 0.0;
      double redEnvelopeDeduction = detailObj.redEnvelopeDeduction != null
          ? detailObj.redEnvelopeDeduction
          : 0.0;
      totalPay =
          (serviceCost + travelCost) - (couponDeduction + redEnvelopeDeduction);
      if (totalPay < 0) {
        totalPay = 0.0;
      }
      _hasData = true;
      // dismissLoading(context);
      setState(() {});
    }, onError: (code, msg) {
      // dismissLoading(context);
      toasts(msg);
    });
  }

  VideoPlayerController _controllerBefore;
  VideoPlayerController _controllerAfter;
  // 确认完成
  void _confirmComplete() {
    showLoading(context);
    NewApiService().chargeMakeSureCase({
      "id": widget.id,
    }, onSuccess: (res) {
      toasts("确认完成");
      getBrandDetail();
      dismissLoading(context);
      setState(() {});
    }, onError: (code, msg) {
      dismissLoading(context);
      toasts(msg);
    });
  }

  @override
  void initState() {
    if (this.mounted) {
      getBrandDetail();
    }
    super.initState();

//      _locationListener = _locationPlugin
//         .onLocationChanged()
//         .listen((Map<String, Object> result) {
//       setState(() {
//         _locationPlugin.stopLocation();
//         _locationResult = result;
// //        address latitude longitude
//         _locationResult.forEach((key, value) {
//           if (key == 'address') {
//             address = '$value';
//             setState(() {});
//           } else if (key == 'latitude') {
//            latitude = double.parse('$value');
//             setState(() {});
//           } else if (key == 'longitude') {
//            longitude = double.parse('$value');
//             setState(() {});
//           }
//           print(111);
//           print('key:$key :');
//           print('value:$value :');
//         });
//       });
//     });

//     getLocation();
  }

  @override
  void dispose() {
    _controller?.pause();
    _controller?.dispose();
    _chewieController?.dispose();
    if (detailObj.beforeRepair != null) {
      _controllerBefore?.pause();
      _controllerBefore?.dispose();
    }
    if (detailObj.afterRepair != null) {
      _controllerAfter?.pause();
      _controllerAfter?.dispose();
    }
    // SystemChrome.setPreferredOrientations([
    //   DeviceOrientation.portraitUp,
    // ]);
    OrientationPlugin.forceOrientation(DeviceOrientation.portraitUp);
    // provider.dispose();
    super.dispose();
  }

  getHeight(detailObj) {
    bool isHeight = false;
    if ((OrderConstant.isShow(
            detailObj.statuz, detailObj.dataTable, 'showExpertQuoteButton')) ||
        (OrderConstant.isShow(detailObj.statuz, detailObj.dataTable,
                'showExpertPunchButton') &&
            detailObj.arrivedFlag == 0) ||
        (OrderConstant.isShow(detailObj.statuz, detailObj.dataTable,
            'showExpertConfirmOrderButton',
            arrivedFlag: detailObj.arrivedFlag)) ||
        (OrderConstant.isShow(detailObj.statuz, detailObj.dataTable,
            'showExpertArchiveButton'))) {
      isHeight = true;
    }
    return isHeight;
  }

  @override
  Widget build(BuildContext context) {
    double width = MediaQuery.of(context).size.width;
    double height = MediaQuery.of(context).size.height;
    if (width > height) {
      // SystemChrome.setPreferredOrientations([
      //   DeviceOrientation.portraitUp,
      // ]);
      OrientationPlugin.forceOrientation(DeviceOrientation.portraitUp);
    }
    return ChangeNotifierProvider<UserProvider>(
      create: (_) => provider,
      child: Scaffold(
        appBar: MyAppBar(
          centerTitle: "订单详情",
        ),
        body: _hasData
            ? Consumer<UserProvider>(
                builder: (_, provider, __) {
                  return SafeArea(
                    child: Stack(
                      children: <Widget>[
                        ListView(
                            padding: EdgeInsets.all(0.0),
                            children: <Widget>[
                              _orderTypeHead(),
                              _lineSpase(),
                              _orderUserDetail(),
                              isShowMoneyDetail() ? _lineSpase() : Container(),
                              isShowMoneyDetail()
                                  ? _orderMoneyDetail()
                                  : Container(),
                              _lineSpase(),
                              _orderTime(),
                              _lineSpase(),
                              OrderConstant.isShow(
                                          detailObj.statuz,
                                          detailObj.dataTable,
                                          'showExpertPunchButton') &&
                                      detailObj.arrivedFlag == 0
                                  ? _uploadLiveVideo()
                                  : Container(),
                              OrderConstant.isShow(
                                          detailObj.statuz,
                                          detailObj.dataTable,
                                          'showExpertConfirmOrderButton',
                                          arrivedFlag: detailObj.arrivedFlag) &&
                                      detailObj.dataTable == 2
                                  ? _uploadLiveVideo()
                                  : Container(),
                              (detailObj.dataTable == 1 &&
                                      detailObj.arrivedFlag == 5 &&
                                      detailObj.examineFlag == '2')
                                  ? _boHuiTip()
                                  : Container(),
                              isShowOrderLive()
                                  ? _orderLiveVideo()
                                  : Container(),
                              SizedBox(height: 80),
                            ]),
                        Positioned(
                          bottom: 0,
                          left: 0,
                          child: Container(
                            width: width,
                            height: !getHeight(detailObj) ? 0 : 60,
                            padding: EdgeInsets.only(
                              // right: ScreenUtil().setWidth(15),
                              // left: ScreenUtil().setWidth(15),
                              top: 7.5,
                              bottom: 7.5,
                            ),
                            decoration: BoxDecoration(
                              border: Border(
                                top: BorderSide(
                                    width: 0.5, color: Color(0xffeeeeee)),
                              ),
                              color:
                                  ThemeUtils.getDialogTextFieldColor(context),
                            ),
                            child: Row(
                              mainAxisAlignment: MainAxisAlignment.end,
                              crossAxisAlignment: CrossAxisAlignment.center,
                              children: <Widget>[
                                OrderConstant.isShow(
                                        detailObj.statuz,
                                        detailObj.dataTable,
                                        'showExpertQuoteButton')
                                    ? BottomBtn(
                                        title: detailObj.statuz == 1
                                            ? "立即报价"
                                            : "修改报价",
                                        fun: () {
                                          if (_controllerBefore != null) {
                                            _controllerBefore?.pause();
                                          }
                                          if (_controllerAfter != null) {
                                            _controllerAfter?.pause();
                                          }
                                          NavigatorUtils.push(context,
                                              "${WodeRouter.baoPrice}?id=${detailObj.id}&travelCost=${detailObj.travelCost != null ? detailObj.travelCost.toString() : ''}&serviceCost=${detailObj.serviceCost != null ? detailObj.serviceCost.toString() : ''}");
                                        },
                                      )
                                    : Container(child: null),
                                // detailObj.statuz == 3 || detailObj.statuz == 6
                                //     ? BottomBtn(
                                //         title: "上传视频",
                                //         fun: () {
                                //           // NavigatorUtils.push(context,WodeRouter.representations);
                                //         },
                                //       )
                                //     : Container(child: null),
                                OrderConstant.isShow(
                                            detailObj.statuz,
                                            detailObj.dataTable,
                                            'showExpertPunchButton') &&
                                        detailObj.arrivedFlag == 0
                                    ? BottomBtn(
                                        title: "立即打卡",
                                        fun: () {
                                          punchin();
                                          // if (_controllerBefore != null) {
                                          //   _controllerBefore.pause();
                                          // }
                                          // if (_controllerAfter != null) {
                                          //   _controllerAfter.pause();
                                          // }
                                          // NavigatorUtils.push(context,
                                          //     "${WodeRouter.punchin}?id=${detailObj.id}");
                                        },
                                      )
                                    : Container(child: null),
                                OrderConstant.isShow(
                                        detailObj.statuz,
                                        detailObj.dataTable,
                                        'showExpertConfirmOrderButton',
                                        arrivedFlag: detailObj.arrivedFlag)
                                    ? BottomBtn(
                                        title: "确认完成",
                                        fun: () {
                                          if (detailObj.dataTable == 1) {
                                            _confirmComplete();
                                          } else {
                                            submitApply();
                                            // punchin();
                                            // if (_controllerBefore != null) {
                                            //   _controllerBefore.pause();
                                            // }
                                            // if (_controllerAfter != null) {
                                            //   _controllerAfter.pause();
                                            // }
                                            // NavigatorUtils.push(context,
                                            //     "${WodeRouter.confirmOrder}?id=${detailObj.id}");
                                          }
                                        },
                                      )
                                    : Container(child: null),
                                OrderConstant.isShow(
                                        detailObj.statuz,
                                        detailObj.dataTable,
                                        'showExpertArchiveButton',
                                        examineFlag: detailObj
                                            .questionBankEntity?.examineFlag)
                                    ? BottomBtn(
                                        title: detailObj.questionBankEntity
                                                    ?.examineFlag ==
                                                2
                                            ? '重新提交'
                                            : "立即归档",
                                        fun: () {
                                          if (_controllerBefore != null) {
                                            _controllerBefore.pause();
                                          }
                                          if (_controllerAfter != null) {
                                            _controllerAfter.pause();
                                          }
                                          NavigatorUtils.push(context,
                                              "${WodeRouter.archive}?id=${detailObj.id}");
                                        },
                                      )
                                    : Container(child: null),
                              ],
                            ),
                          ),
                        )
                      ],
                    ),
                  );
                },
              )
            : Center(
                child: Text("正在加载..."),
              ),
      ),
    );
  }

  _lineSpase() {
    return Container(
      color: ThemeUtils.getDialogTextFieldColor(context),
      height: ScreenUtil().setWidth(5),
    );
  }

  _orderTypeHead() {
    return Container(
      // decoration: BoxDecoration(
      //   gradient: const LinearGradient(
      //     colors: [Color(0xFF00D9FF), Color(0xFF0287FF)],
      //   ),
      // ),
      padding: EdgeInsets.only(
          top: ScreenUtil().setWidth(10), left: ScreenUtil().setWidth(10)),
      height: ScreenUtil().setWidth(90),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Row(
            // crossAxisAlignment: CrossAxisAlignment.start,
            // mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Icon(
                //  : 0xe604,
                OrderConstant.getIconFontCode(
                    detailObj.statuz, detailObj.dataTable),
                size: 20.0,
                color: Color(0xff333333),
              ),
              SizedBox(
                width: 5,
              ),
              Text(
                OrderConstant.getStatusName(
                    detailObj.statuz, detailObj.dataTable,
                    arrivedFlag: detailObj.arrivedFlag,
                    userType: 'Expert',
                    examineFlag: detailObj.questionBankEntity?.examineFlag),
                textAlign: TextAlign.left,
                style: TextStyle(
                  fontSize: ScreenUtil().setSp(14),
                  color: Colours.text,
                ),
              ),
              Expanded(child: Container()),
              Text(
                '订单号:',
                textAlign: TextAlign.left,
                style: TextStyle(
                  fontSize: ScreenUtil().setSp(14),
                  color: Colours.text,
                ),
              ),
              Text(
                '${detailObj.orderNo ?? '无'}',
                textAlign: TextAlign.left,
                style: TextStyle(
                  fontSize: ScreenUtil().setSp(14),
                  color: Colours.text_gray,
                ),
              ),
              //
              SizedBox(
                width: 10,
              )
            ],
          ),
          Container(
            margin: EdgeInsets.only(left: 25, top: 10),
            child: Text(
              // '',
              OrderConstant.getdetailStatusName(
                  detailObj.statuz, detailObj.dataTable,
                  arrivedFlag: detailObj.arrivedFlag, userType: 'Expert'),
              textAlign: TextAlign.left,
              style: TextStyle(
                fontSize: ScreenUtil().setSp(13),
                color: Colours.dark_text_gray,
              ),
            ),
          )
        ],
      ),
    );
  }

  _orderUserDetail() {
    return Container(
      // height: 20,
      padding: EdgeInsets.only(
          bottom: ScreenUtil().setWidth(20), top: ScreenUtil().setWidth(10)),
      child: Row(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Expanded(
            child: GestureDetector(
              onTap: () {
                if (_controllerBefore != null) {
                  _controllerBefore?.pause();
                }
                if (_controllerAfter != null) {
                  _controllerAfter?.pause();
                }
                NavigatorUtils.push(context,
                    "${BbsRouter.recommendAsk}?id=${detailObj.id}&type=3");
              },
              child: Row(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: <Widget>[
                  SizedBox(
                    width: 10,
                  ),
                  ClipRRect(
                    borderRadius: BorderRadius.circular(20),
                    child: LoadNetworkImage(
                      detailObj.avatarUrl,
                      width: ScreenUtil().setWidth(43),
                      height: ScreenUtil().setWidth(43),
                      // alignment: Alignment.centerLeft,
                    ),

                    // Container(
                    //                             margin: EdgeInsets.only(
                    //                                 left: ScreenUtil().setWidth(15),
                    //                                 right: ScreenUtil().setWidth(10),
                    //                                 // top: ScreenUtil().setWidth(5)
                    //                                 ),
                    //                             decoration: BoxDecoration(
                    //                               borderRadius: BorderRadius.circular(
                    //                                   ScreenUtil().setWidth(22)),
                    //                             ),
                    //                             child: LoadNetworkImage(
                    //                               detailObj.avatarUrl,
                    //                               width: ScreenUtil().setWidth(43),
                    //                               height: ScreenUtil().setWidth(43),
                    //                               // alignment: Alignment.centerLeft,
                    //                             ),
                    //                           ),
                  ),
                  SizedBox(
                    width: 10,
                  ),
                  Expanded(
                    child: Container(
                      padding:
                          EdgeInsets.only(right: ScreenUtil().setWidth(15)),
                      child: Column(
                        children: <Widget>[
                          Container(
                            child: Row(
                              mainAxisAlignment: MainAxisAlignment.start,
                              children: <Widget>[
                                Row(
                                  crossAxisAlignment: CrossAxisAlignment.center,
                                  children: <Widget>[
                                    Text(
                                      detailObj.name ?? '',
                                      style: TextStyle(
                                        fontSize: ScreenUtil().setSp(17),
                                      ),
                                      textAlign: TextAlign.start,
                                    ),
                                    Container(
                                      decoration: BoxDecoration(
                                        //背景
                                        color: detailObj.dataTable == 1
                                            ? Colours.blue_app_main
                                            : Color(0xffFDAF2C),
                                        //设置四周圆角 角度
                                        borderRadius: BorderRadius.all(
                                            Radius.circular(4.0)),
                                      ),
                                      margin: EdgeInsets.only(left: 5),
                                      padding: EdgeInsets.only(
                                          left: 5, right: 5, top: 2, bottom: 2),
                                      child: Text(
                                        detailObj.dataTable == 1
                                            ? '问诊服务'
                                            : '出诊服务',
                                        style: TextStyle(
                                          color: Colors.white,
                                          fontSize: ScreenUtil().setSp(14),
                                        ),
                                        textAlign: TextAlign.start,
                                      ),
                                    ),
                                  ],
                                ),
                              ],
                            ),
                          ),

                          Container(
                            child: Row(
                              mainAxisAlignment: MainAxisAlignment.spaceBetween,
                              children: <Widget>[
                                Row(
                                  crossAxisAlignment: CrossAxisAlignment.center,
                                  children: <Widget>[
                                    Text(
                                      detailObj.createTime != null
                                          ? DateUtils.instance.getFormartData(
                                              timeSamp: detailObj.createTime,
                                              format: "MM月dd日")
                                          : '',
                                      style: TextStyle(
                                        color: Color(0xff999999),
                                        fontSize: ScreenUtil().setSp(13),
                                      ),
                                      textAlign: TextAlign.start,
                                    ),
                                    Container(
                                      padding: EdgeInsets.only(left: 5),
                                      child: Text(
                                        detailObj.brandName ?? '',
                                        style: TextStyle(
                                          color: Colours.blue_app_main,
                                          fontSize: ScreenUtil().setSp(13),
                                        ),
                                        textAlign: TextAlign.start,
                                      ),
                                    )
                                  ],
                                ),
                              ],
                            ),
                          ),
                          detailObj.dataTable != 1
                              ? Container(
                                  child: Row(
                                    mainAxisAlignment:
                                        MainAxisAlignment.spaceBetween,
                                    children: <Widget>[
                                      Row(
                                        crossAxisAlignment:
                                            CrossAxisAlignment.start,
                                        children: <Widget>[
                                          Container(
                                            // padding: EdgeInsets.only(left: 5),
                                            child: Text(
                                              '出诊时间：',
                                              style: TextStyle(
                                                color: Color(0xff999999),
                                                fontSize:
                                                    ScreenUtil().setSp(13),
                                              ),
                                              textAlign: TextAlign.start,
                                            ),
                                          ),
                                          Text(
                                            detailObj.arrivedTime != null
                                                ? DateUtils.instance
                                                    .getFormartData(
                                                        timeSamp: detailObj
                                                            .arrivedTime,
                                                        format: "MM月dd日 HH:mm")
                                                : '',
                                            style: TextStyle(
                                              color: Color(0xff666666),
                                              fontSize: ScreenUtil().setSp(13),
                                            ),
                                            textAlign: TextAlign.start,
                                          ),
                                        ],
                                      ),
                                    ],
                                  ),
                                )
                              : Container(),
                          detailObj.dataTable != 1
                              ? Container(
                                  // margin: EdgeInsets.only(top: 6),
                                  child: Row(
                                    children: <Widget>[
                                      Container(
                                        // padding: EdgeInsets.only(left: 5),
                                        child: Text(
                                          '出诊地点：',
                                          style: TextStyle(
                                            color: Color(0xff999999),
                                            fontSize: ScreenUtil().setSp(13),
                                          ),
                                          textAlign: TextAlign.start,
                                        ),
                                      ),
                                      Container(
                                        width: ScreenUtil().setWidth(230),
                                        child: Text(
                                          '${detailObj.address ?? ''}',
                                          style: TextStyle(
                                            color: Color(0xff666666),
                                            fontSize: ScreenUtil().setSp(13),
                                            // color: Color(0xff666666),
                                            // fontSize: ScreenUtil().setSp(15),
                                          ),
                                          textAlign: TextAlign.start,
                                          maxLines: 1,
                                          overflow: TextOverflow.ellipsis,
                                        ),
                                      ),
                                    ],
                                  ),
                                )
                              : Container(),
                          Container(
                            // margin: EdgeInsets.only(top: 6),
                            child: Row(
                              children: <Widget>[
                                Container(
                                  // padding: EdgeInsets.only(left: 5),
                                  child: Text(
                                    '问题描述：',
                                    style: TextStyle(
                                      color: Color(0xff999999),
                                      fontSize: ScreenUtil().setSp(13),
                                    ),
                                    textAlign: TextAlign.start,
                                  ),
                                ),
                                Container(
                                  width: ScreenUtil().setWidth(230),
                                  child: Text(
                                    '${detailObj.expression ?? ''}',
                                    style: TextStyle(
                                      color: Color(0xff666666),
                                      fontSize: ScreenUtil().setSp(13),
                                      // color: Color(0xff666666),
                                      // fontSize: ScreenUtil().setSp(15),
                                    ),
                                    textAlign: TextAlign.start,
                                    maxLines: 1,
                                    overflow: TextOverflow.ellipsis,
                                  ),
                                ),
                              ],
                            ),
                          ),
                          Container(
                            // margin: EdgeInsets.only(top: 6),
                            child: Row(
                              children: <Widget>[
                                Container(
                                  // padding: EdgeInsets.only(left: 5),
                                  child: Text(
                                    '出厂日期：',
                                    style: TextStyle(
                                      color: Color(0xff999999),
                                      fontSize: ScreenUtil().setSp(13),
                                    ),
                                    textAlign: TextAlign.start,
                                  ),
                                ),
                                Container(
                                  width: ScreenUtil().setWidth(230),
                                  child: Text(
                                    '${detailObj.productionDate ?? ''}',
                                    style: TextStyle(
                                      color: Color(0xff666666),
                                      fontSize: ScreenUtil().setSp(13),
                                      // color: Color(0xff666666),
                                      // fontSize: ScreenUtil().setSp(15),
                                    ),
                                    textAlign: TextAlign.start,
                                    maxLines: 1,
                                    overflow: TextOverflow.ellipsis,
                                  ),
                                ),
                              ],
                            ),
                          ),
                          // Container(
                          //   child: Row(
                          //     mainAxisAlignment:
                          //         MainAxisAlignment.start,
                          //     children: <Widget>[
                          //       Row(
                          //         crossAxisAlignment:
                          //             CrossAxisAlignment
                          //                 .center,
                          //         children: <Widget>[
                          //           Text(
                          //             detailObj.createTime !=
                          //                     null
                          //                 ? DateUtils
                          //                     .instance
                          //                     .getFormartData(
                          //                     timeSamp:
                          //                         detailObj
                          //                             .createTime,
                          //                     format:
                          //                         "MM月dd日",
                          //                   )
                          //                 : '',
                          //             style: TextStyle(
                          //               color: Color(
                          //                   0xff999999),
                          //               fontSize:
                          //                   ScreenUtil()
                          //                       .setSp(
                          //                           13),
                          //             ),
                          //             textAlign:
                          //                 TextAlign.left,
                          //           ),
                          //           Container(
                          //             padding:
                          //                 EdgeInsets.only(
                          //                     left: 5),
                          //             child: Text(
                          //               detailObj
                          //                       .brandName ??
                          //                   '',
                          //               style: TextStyle(
                          //                 color: Color(
                          //                     0xff999999),
                          //                 fontSize:
                          //                     ScreenUtil()
                          //                         .setSp(
                          //                             13),
                          //               ),
                          //               textAlign:
                          //                   TextAlign
                          //                       .left,
                          //             ),
                          //           )
                          //         ],
                          //       ),
                          //     ],
                          //   ),
                          // ),
                          // Row(
                          //   mainAxisAlignment:
                          //       MainAxisAlignment.start,
                          //   children: <Widget>[
                          //     Container(
                          //       width: 260,
                          //       child: Text(
                          //         detailObj.expression ??
                          //             '',
                          //         style: TextStyle(
                          //           color:
                          //               Color(0xff0288FF),
                          //           fontSize: ScreenUtil()
                          //               .setSp(15),
                          //         ),
                          //         textAlign:
                          //             TextAlign.left,
                          //         maxLines: 1,
                          //         overflow: TextOverflow
                          //             .ellipsis,
                          //       ),
                          //     ),
                          //   ],
                          // ),
                        ],
                      ),
                    ),
                  )
                ],
              ),
            ),
          ),
        ],
      ),
    );
  }

  _orderMoneyDetail() {
    return Column(
      children: [
        detailObj.dataTable == 2
            ? Heng(
                left: "差旅费",
                right: detailObj.travelCost != null
                    ? "￥" + detailObj.travelCost.toString()
                    : '￥0',
                leftColor: 0xff333333,
                rightColor: 0xff333333,
              )
            : Container(),
        Heng(
          left: "技术服务费",
          right: detailObj.serviceCost != null
              ? "￥" + detailObj.serviceCost.toString()
              : '￥0',
          leftColor: 0xff333333,
          rightColor: 0xff333333,
        ),
        Heng(
          left: "优惠券抵扣",
          right: detailObj.couponDeduction != null
              ? "-￥" + detailObj.couponDeduction.toString()
              : '-￥0',
          leftColor: 0xff333333,
          rightColor: 0xff333333,
        ),
        Heng(
          left: "红包抵扣",
          right: detailObj.redEnvelopeDeduction != null
              ? "-￥" + detailObj.redEnvelopeDeduction.toString()
              : '-￥0',
          leftColor: 0xff333333,
          rightColor: 0xff333333,
        ),
        Heng(
          left: "实付款",
          right: detailObj.payCost != null && getPayCost()
              ? "￥" + detailObj.payCost.toString()
              : '￥' + totalPay.toStringAsFixed(2).toString(),
          leftColor: 0xff333333,
          rightColor: 0xffFD0808,
        ),
      ],
    );
  }

  _orderTime() {
    return Container(
      padding: EdgeInsets.only(
          left: ScreenUtil().setWidth(15),
          top: ScreenUtil().setWidth(10),
          bottom: ScreenUtil().setWidth(10)),
      child: Row(
        children: <Widget>[
          Text(
            '下单时间:',
            textAlign: TextAlign.left,
            style: TextStyle(
              fontSize: 14,
              color: Color(0xff333333),
            ),
          ),
          Text(
            detailObj.createTime != null
                ? DateUtils.instance.getFormartData(
                    timeSamp: detailObj.createTime,
                    format: "yyyy-MM-dd HH:mm:ss")
                : '',
            textAlign: TextAlign.left,
            style: TextStyle(
              fontSize: ScreenUtil().setSp(13),
              color: Color(0xff999999),
            ),
          ),
        ],
      ),
    );
  }

  ///现场视频维修前维修后
  _orderLiveVideo() {
    double width = MediaQuery.of(context).size.width;
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[
        Container(
          width: width,
          padding: EdgeInsets.only(
              left: ScreenUtil().setWidth(15),
              top: ScreenUtil().setWidth(10),
              bottom: ScreenUtil().setWidth(10)),
          decoration: BoxDecoration(
            border: Border(
              bottom: BorderSide(width: .5, color: Color(0xfff5f5f5)),
            ),
          ),
          child: Text(
            '现场情况(维修前)',
            textAlign: TextAlign.left,
            style: TextStyle(
              fontSize: 17,
              color: Color(0xff333333),
            ),
          ),
        ),
        detailObj.beforeRepair != null
            ? Container(
                padding: EdgeInsets.only(
                    left: ScreenUtil().setWidth(15),
                    right: ScreenUtil().setWidth(15),
                    top: ScreenUtil().setWidth(15)),
                child: ClipRRect(
                  borderRadius: BorderRadius.circular(5),
                  child: new Chewie(
                    controller: ChewieController(
                      videoPlayerController:
                          //   VideoPlayerController.network(
                          // Utils.getImagePath(detailObj.beforeRepair)
                          // // imgFontUrl + detailObj.url
                          // )
                          _controllerBefore,
                      aspectRatio: 3 / 2,
                      autoPlay: false,
                      looping: true,
                      showControls: true,
                      deviceOrientationsAfterFullScreen: [
                        DeviceOrientation.portraitUp,
                      ],
                      // 占位图
                      // placeholder: Image.network(
                      //     imgFontUrl+detailObj.cover,
                      //     fit: BoxFit.contain,

                      //   ),

                      // 是否在 UI 构建的时候就加载视频
                      autoInitialize: true,

                      // 拖动条样式颜色
                      materialProgressColors: new ChewieProgressColors(
                        playedColor: Colors.red,
                        handleColor: Colors.blue,
                        backgroundColor: Colors.grey,
                        bufferedColor: Colors.lightGreen,
                      ),
                    ),
                  ),
                ))
            : Container(
                padding: EdgeInsets.only(left: 15),
                child: Text("暂无"),
              ),
        Container(
          width: width,
          padding: EdgeInsets.only(
              left: ScreenUtil().setWidth(15),
              top: ScreenUtil().setWidth(10),
              bottom: ScreenUtil().setWidth(10)),
          decoration: BoxDecoration(
            border: Border(
              bottom: BorderSide(width: .5, color: Color(0xfff5f5f5)),
            ),
          ),
          child: Text(
            '现场情况(维修后)',
            textAlign: TextAlign.left,
            style: TextStyle(
              fontSize: 17,
              color: Color(0xff333333),
            ),
          ),
        ),
        detailObj.afterRepair != null
            ? Container(
                padding: EdgeInsets.only(
                    left: ScreenUtil().setWidth(15),
                    right: ScreenUtil().setWidth(15),
                    top: ScreenUtil().setWidth(15)),
                child: ClipRRect(
                  borderRadius: BorderRadius.circular(5),
                  child: new Chewie(
                    controller: ChewieController(
                      videoPlayerController:
                          //   VideoPlayerController.network(
                          // Utils.getImagePath(detailObj.afterRepair)
                          // // imgFontUrl + detailObj.url
                          // )
                          _controllerAfter,
                      aspectRatio: 3 / 2,
                      autoPlay: false,
                      looping: true,
                      showControls: true,
                      deviceOrientationsAfterFullScreen: [
                        DeviceOrientation.portraitUp,
                      ],
                      // 占位图
                      // placeholder: Image.network(
                      //     imgFontUrl+detailObj.cover,
                      //     fit: BoxFit.contain,

                      //   ),

                      // 是否在 UI 构建的时候就加载视频
                      autoInitialize: true,

                      // 拖动条样式颜色
                      materialProgressColors: new ChewieProgressColors(
                        playedColor: Colors.red,
                        handleColor: Colors.blue,
                        backgroundColor: Colors.grey,
                        bufferedColor: Colors.lightGreen,
                      ),
                    ),
                  ),
                ))
            : Container(
                padding: EdgeInsets.only(left: 15),
                child: Text("暂无"),
              ),
      ],
    );
  }

  _boHuiTip() {
    double width = MediaQuery.of(context).size.width;
    return Container(
      padding: EdgeInsets.only(
          left: ScreenUtil().setWidth(15),
          top: ScreenUtil().setWidth(10),
          bottom: ScreenUtil().setWidth(10)),
      child: Column(
        children: <Widget>[
          detailObj.questionBankEntity != null
              ? Row(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                    Text(
                      '驳回原因:',
                      textAlign: TextAlign.left,
                      style: TextStyle(
                        fontSize: ScreenUtil().setSp(13),
                        color: Color(0xff666666),
                      ),
                    ),
                    Container(
                      width: width * 0.75,
                      child: Text(
                        detailObj.questionBankEntity?.notExamineReason ?? "",
                        textAlign: TextAlign.left,
                        style: TextStyle(
                          fontSize: ScreenUtil().setSp(13),
                          color: Color(0xff666666),
                        ),
                      ),
                    )
                  ],
                )
              : Container(
                  child: null,
                ),
        ],
      ),
    );
  }

  _uploadLiveVideo() {
    return Column(
      children: [
        detailObj.arrivedFlag != 1
            ? Row(
                children: [
                  Container(
                    height: 11,
                    width: 2,
                    color: Colours.blue_app_main,
                  ),
                  SizedBox(
                    width: 13,
                  ),
                  Text('打卡信息')
                ],
              )
            : Container(),
        detailObj.arrivedFlag != 1
            ? Container(
                height: 40,
                child: InkWell(
                  onTap: () {
                    Navigator.of(context).push(MaterialPageRoute(
                        builder: (context) => ExpertCheckPage(
                              backFun: (lat, lon, add) {
                                latitude = lat;
                                longitude = lon;
                                address = add;
                                print(address);
                                setState(() {});
                              },
                            )));
                  },
                  child: Row(
                    children: [
                      SizedBox(
                        width: 15,
                      ),
                      Icon(
                        const IconData(0xe638, fontFamily: "Iconfont"),
                        size: 17.0,
                        color: Colours.blue_app_main,
                      ),
                      Text(
                        '${address ?? '点击查看位置'}',
                        style: TextStyle(color: Colours.blue_app_main),
                      ),
                      Expanded(child: Container()),
                      Icon(
                        Icons.arrow_forward_ios,
                        size: 12,
                        color: Color(0xff999999),
                      ),
                      SizedBox(
                        width: 15,
                      ),
                    ],
                  ),
                ),
              )
            : Container(),
        Row(
          children: [
            Container(
              height: 11,
              width: 2,
              color: Colours.blue_app_main,
            ),
            SizedBox(
              width: 13,
            ),
            Text(detailObj.arrivedFlag != 1 ? '现场情况(维修前)' : '现场情况(维修后)')
          ],
        ),
        Container(
          // color: ThemeUtils.getDialogTextFieldColor(context),
          // color: Colors.red,
          child: GridView.builder(
            shrinkWrap: true,
            padding: const EdgeInsets.fromLTRB(8.0, 0, 8.0, 12.0),
            physics: NeverScrollableScrollPhysics(),
            gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                crossAxisCount: 1, childAspectRatio: 1.5),
            itemCount: 1,
            itemBuilder: (_, index) {
              return Stack(
                children: <Widget>[
                  Center(
                    child: SelectedVideo(
                      image: videoUrl,
                      index: index,
                      videoPlay: videoPlay(),
                      onTap: () {
                        if (videoUrl == null) {
                          selectPicker();
                        }
                      },
                    ),
                  ),
                  videoUrl != null
                      ? Positioned(
                          top: 0,
                          right: 0,
                          child: GestureDetector(
                            onTap: () {
                              setState(() {
                                videoUrl = null;
                                str = null;
                                _controller.pause();
                                // player.reset();
                              });
                            },
                            child: Icon(
                              const IconData(0xe651, fontFamily: "Iconfont"),
                              size: 24.0,
                              color: Color(0xff999999),
                            ),
                          ),
                        )
                      : Container(
                          child: null,
                        )
                ],
              );
            },
          ),
        )
      ],
    );
  }

  _orderSSInfo() {
    return Container(
      padding: EdgeInsets.only(
          left: ScreenUtil().setWidth(15),
          top: ScreenUtil().setWidth(10),
          bottom: ScreenUtil().setWidth(10)),
      child: Column(
        children: <Widget>[
          Row(
            children: <Widget>[
              Text(
                '申诉内容:',
                textAlign: TextAlign.left,
                style: TextStyle(
                  fontSize: 14,
                  color: Color(0xff333333),
                ),
              ),
              Text(
                detailObj.liftCaseAppealEntity != null &&
                        detailObj.liftCaseAppealEntity.content != null
                    ? detailObj.liftCaseAppealEntity.content
                    : '',
                textAlign: TextAlign.left,
                style: TextStyle(
                  fontSize: 14,
                  color: Color(0xff999999),
                ),
              ),
            ],
          ),
          Row(
            children: <Widget>[
              Text(
                '申诉时间:',
                textAlign: TextAlign.left,
                style: TextStyle(
                  fontSize: 14,
                  color: Color(0xff333333),
                ),
              ),
              Text(
                detailObj.liftCaseAppealEntity != null &&
                        detailObj.liftCaseAppealEntity.createTime != null
                    ? DateUtils.instance.getFormartData(
                        timeSamp: detailObj.liftCaseAppealEntity.createTime,
                        format: "yyyy-MM-dd HH:mm:ss")
                    : '',
                textAlign: TextAlign.left,
                style: TextStyle(
                  fontSize: 14,
                  color: Color(0xff999999),
                ),
              ),
            ],
          ),
        ],
      ),
    );
  }

  VideoPlayerController _controller;
  VideoPlayerController _controllerFile;
  ChewieController _chewieController;

  ///选择图片
  void selectPicker() {
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return SimpleDialog(
          title: Text("选择方式"),
          children: ["拍照", '从手机相册选择'].map((String value) {
            print("$value");
            return SimpleDialogOption(
              child: Text(
                "${value}",
                style: TextStyle(fontSize: 16, fontWeight: FontWeight.w500),
              ),
              onPressed: () {
                _getImage(value == '拍照' ? 1 : 0);
                Navigator.of(context).pop();
              },
            );
          }).toList(),
        );
      },
    );
  }

  void _getImage(int key) async {
    print(key);
    print(333);
    try {
      await ImagePicker.pickVideo(
        source: key == 1 ? ImageSource.camera : ImageSource.gallery,
      ).then((File f) async {
        if (f != null) {
          _controllerFile = VideoPlayerController.file(f);
          _controllerFile.initialize().then((val) {
            _controllerFile.setLooping(true);
            int seconds = _controllerFile.value.duration.inSeconds;
            print("视频时长：$seconds");
            int fileSize = f.lengthSync(); //单位B
            print("视频大小：${fileSize}");
            print("视频大小：${f.path}");
            if (seconds <= 300) {
              _uploadImage(f.path);
              // upLoadFileOnce(_imageFile.path);
              // setState(() {});
            } else {
              toasts("视频时长不能大于5分钟！");
            }
          }).catchError((error) {
            print(error);
            print("error");
            toasts("上传失败,不支持此格式");
          });
        }
      });
    } catch (e) {
      toasts("没有权限，无法打开相册！");
    }
  }

  upLoadFileOnce(path) {
    showLoading(context, "正在上传...");
    NewApiService().upload(path, onSuccess: (res) {
      dismissLoading(context);
      setState(() {
        videoUrl = res.pathUrl;
        imagesUrl = res.coverUrl;
      });
    }, onError: (code, msg) {
      dismissLoading(context);
      toasts(msg);
    });
  }

  void _uploadImage(filePath) async {
    showPercent(context, () {
      dismissLoading(context);
      toasts("上传失败");
    }, () {
      if (videoUrl == null && str != null) {
        setState(() {
          videoUrl = str;
          settingVideoVC();
          print("videoUrl:" + videoUrl);
          dismissLoading(context);
          toasts("上传成功");
        });
      }
    });
    String uploadName = OssUtil.instance.getImageUploadName(filePath);
    await NewApiService.uploadImage(context, uploadName, filePath).then((data) {
      if (data.statusCode == 200) {
        str = NewApiUrl.URL_UPLOAD_IMAGE_OSS + "/" + uploadName;
        print("str:" + str);
        print(videoUrl);
        if (str != null) {
          Map obj = {"uploadName": uploadName, "success": true};
          FastNotification.push("percent", obj);
        }
      } else {
        Map obj = {"uploadName": uploadName, "success": false};
        FastNotification.push("percent", obj);
      }
    }).catchError((data) {
      Map obj = {"uploadName": uploadName, "success": false};
      FastNotification.push("percent", obj);
    });
  }

  settingVideoVC() {
    _controller?.pause();
    _controller?.dispose();
    _chewieController?.dispose();

    _controller = VideoPlayerController.network(Utils.getImagePath(videoUrl)
        // imgFontUrl + detailObj.url
        );
    _chewieController = ChewieController(
      videoPlayerController:
          // VideoPlayerController.network(
          //     imgFontUrl + detailObj.url
          //     ),
          _controller,
      aspectRatio: 3 / 2,
      autoPlay: false,
      looping: true,
      showControls: true,
      deviceOrientationsAfterFullScreen: [
        DeviceOrientation.portraitUp,
      ],
      // 占位图
      // placeholder: Image.network(
      //     imgFontUrl+detailObj.cover,
      //     fit: BoxFit.contain,

      //   ),

      // 是否在 UI 构建的时候就加载视频
      autoInitialize: true,

      // 拖动条样式颜色
      materialProgressColors: new ChewieProgressColors(
        playedColor: Colors.red,
        handleColor: Colors.blue,
        backgroundColor: Colors.grey,
        bufferedColor: Colors.lightGreen,
      ),
    );
  }

  Widget videoPlay() {
    if (_controller == null) return Container();
    double width = MediaQuery.of(context).size.width;
    return Container(
        width: width,
        height: width * 2 / 3,
        padding: EdgeInsets.only(
            left: ScreenUtil().setWidth(15),
            right: ScreenUtil().setWidth(15),
            top: ScreenUtil().setWidth(15)),
        child: ClipRRect(
          borderRadius: BorderRadius.circular(5),
          child: new Chewie(controller: _chewieController),
        ));
  }

// 获取定位权限
  Future<bool> requestPermission() async {
    final permissions = await PermissionHandler()
        .requestPermissions([PermissionGroup.location]);
    if (permissions[PermissionGroup.location] == PermissionStatus.granted) {
      return true;
    } else {
      toasts('需要定位权限!');
      return false;
    }
  }

  // 获取位置信息
  Future<void> punchin() async {
    ///开始定位之前设置定位参数
    if (longitude == null) {
      toasts("请选择打卡地点");
      return;
    }
    if (longitude != null && latitude != null) {
      if (videoUrl == null || videoUrl == '') {
        toasts("请上传视频");
        return;
      }
      showLoading(context);
      NewApiService().chargeToClock({
        "id": detailObj.id,
        "lng": longitude,
        "lat": latitude,
        "beforeRepair": videoUrl,
      }, onSuccess: (res) {
        dismissLoading(context);
        toasts("确认打卡成功");
        if (_controller != null) {
          _controller.pause();
        }
        getBrandDetail();
        // NavigatorUtils.push(
        // context, "${WodeRouter.orderPageMaster}?checkType=0");
        setState(() {});
      }, onError: (code, msg) {
        dismissLoading(context);
        toasts(msg);
      });
    }
  }

  ///确认完成
  submitApply() {
    if (videoUrl == null || videoUrl == '') {
      toasts("请上传视频");
      return;
    }
    showLoading(context);
    NewApiService().chargeMakeSureCase({
      "id": widget.id,
      "afterRepair": videoUrl,
    }, onSuccess: (res) {
      dismissLoading(context);
      toasts("确认完成");
      if (_controller != null) {
        _controller.pause();
      }
      NavigatorUtils.push(context, "${WodeRouter.orderPageMaster}?checkType=0");
      setState(() {});
    }, onError: (code, msg) {
      dismissLoading(context);
      toasts(msg);
    });
  }

  getPayCost() {
    bool isPay = true;
    if ((detailObj.dataTable == 1 && detailObj.statuz == 0) ||
        (detailObj.dataTable == 2 && detailObj.statuz == 2)) {
      isPay = false;
    }
    return isPay;
  }

  isShowMoneyDetail() {
    bool show = true;
    if (detailObj.dataTable == 2) {
      switch (detailObj.statuz) {
        case 0:
        case 1:
          show = false;
          break;

        default:
      }
    }

    // if ((detailObj.dataTable == 2 && (detailObj.statuz == 2)) ||
    //     (detailObj.dataTable == 2 && detailObj.statuz == 2)) {
    //   show = false;
    // }
    return show;
  }

  isShowOrderLive() {
    bool show = false;
    if (detailObj.dataTable == 2) {
      show = true;
      switch (detailObj.statuz) {
        case 0:
        case 1:
        case 2:
        case 3:
          {
            if (detailObj.arrivedFlag == 2) {
              show = true;
            } else {
              show = false;
            }
          }

          break;

        default:
      }
    }
    return show;
  }

  @override
  bool get wantKeepAlive => true;
}

class BottomBtn extends StatelessWidget {
  BottomBtn({Key key, this.title, this.fun}) : super(key: key);
  Function fun;
  String title;
  @override
  Widget build(BuildContext context) {
    return Expanded(
      // margin: EdgeInsets.only(left: 10),
      child: GestureDetector(
        onTap: () {
          fun();
        },
        child: Container(
          child: Container(
            margin: EdgeInsets.only(left: 15, right: 15),
            // // height:22,
            // padding: EdgeInsets.only(
            //   left: ScreenUtil().setWidth(20),
            //   right: ScreenUtil().setWidth(20),
            // ),
            decoration: BoxDecoration(
                border: Border.all(width: 1, color: Color(0xff1B87F6)),
                borderRadius: BorderRadius.circular(23),
                color: Colours.blue_app_main),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text(
                  title,
                  textAlign: TextAlign.center,
                  style: TextStyle(
                    fontSize: ScreenUtil().setSp(15),
                    color: Colors.white,
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}
