import 'package:flutter/material.dart';
import 'package:liftmanager/net/api_service.dart';
import 'package:liftmanager/utils/toast.dart';
import 'package:liftmanager/widgets/app_bar.dart';
import 'package:liftmanager/routers/fluro_navigator.dart';
import 'package:liftmanager/widgets/selected_image_change.dart';
import 'package:image_picker/image_picker.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:liftmanager/internal/wode/wode_router.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:liftmanager/utils/oss_upload.dart';
import 'dart:async';
import 'package:liftmanager/utils/fast_notification.dart';
import 'package:chewie/chewie.dart';
import 'package:flutter/services.dart';
import 'package:liftmanager/utils/utils.dart';
import 'package:orientation/orientation.dart';
import 'package:video_player/video_player.dart';
import 'package:liftmanager/utils/theme_utils.dart';
import 'package:liftmanager/widgets/selected_video_change.dart';
import 'dart:io';

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

  final String id;

  @override
  State<StatefulWidget> createState() {
    return ConfirmOrderState();
  }
}

class ConfirmOrderState extends State<ConfirmOrder> {
  VideoPlayerController _controller;
  VideoPlayerController _controllerFile;
  // final FijkPlayer player = FijkPlayer();
  // List<String> imagesUrl = [];
  // List<String> videoUrl = [];
  String videoUrl;
  String str;
  String imagesUrl;
  double percent = 0.0;

  @override
  void initState() {
    super.initState();
  }

  ///选择图片
  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分钟！");
          }
        });}
      })
      ;
      
    } catch (e) {
      toasts("没有权限，无法打开相册！");
    }
  }

  void _uploadImage(filePath) async {
    showPercent(context, (){
      dismissLoading(context);
      toasts("上传失败");
    },(){
      if(videoUrl == null && str != null){
        setState(() {
            videoUrl = str;
            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);
    });
  }

  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);
    });
  }

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

  // 文本编辑控制
  GlobalKey _formKey = new GlobalKey<FormState>();

  @override
  Widget build(BuildContext context) {
    double width = MediaQuery.of(context).size.width;

    return Scaffold(
      resizeToAvoidBottomPadding: false, //不让键盘弹上去
      appBar: MyAppBar(
        centerTitle: "确认订单",
      ),
      body: Container(
        child: ListView(
          children: <Widget>[
            Form(
              key: _formKey, //设置globalKey，用于后面获取FormState
              // autovalidate: true, //开启自动校验
              child: Column(
                children: <Widget>[
                  Container(
                width: width,
                padding: EdgeInsets.only(left:15,bottom:15),
                child: Text(
                                                        "(建议时长3分钟，建议大小50M)",
                                                        style: TextStyle(
                                                          color: Colors.red,
                                                            fontSize:
                                                                ScreenUtil()
                                                                    .setSp(14),
                                                            ),
                                                            textAlign: TextAlign.left,
                                                      ),
              ),
                  // Container(
                  //   color: Colors.white,
                  //   child: GridView.builder(
                  //     shrinkWrap: true,
                  //     padding: const EdgeInsets.fromLTRB(8.0, 12, 8.0, 12.0),
                  //     physics: NeverScrollableScrollPhysics(),
                  //     gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                  //         crossAxisCount: 3, childAspectRatio: 1.18),
                  //     itemCount: 1,
                  //     itemBuilder: (_, index) {
                  //       return Stack(
                  //         children: <Widget>[
                  //           Center(
                  //             child: SelectedImage(
                  //               image: imagesUrl,
                  //               index: index,
                  //               onTap: () {
                  //                 selectPicker();
                  //                 FocusScope.of(context).requestFocus(FocusNode());
                  //               },
                  //             ),
                  //           ),
                  //           videoUrl != null
                  //               ? Positioned(
                  //                   top: 0,
                  //                   right: 0,
                  //                   child: GestureDetector(
                  //                     onTap: () {
                  //                       print(index);
                  //                       videoUrl = null;
                  //                       imagesUrl = null;
                  //                       setState(() {});
                  //                     },
                  //                     child: Icon(
                  //                       IconData(0xe62a, fontFamily: "myfont"),
                  //                       size: 24.0,
                  //                       color: Color(0xff999999),
                  //                     ),
                  //                   ),
                  //                 )
                  //               : Container(
                  //                   child: null,
                  //                 )
                  //         ],
                  //       );
                  //     },
                  //   ),
                  // ),
                  Container(
                    color: ThemeUtils.getDialogTextFieldColor(context),
                    child: GridView.builder(
                      shrinkWrap: true,
                      padding: const EdgeInsets.fromLTRB(8.0, 12, 8.0, 12.0),
                      physics: NeverScrollableScrollPhysics(),
                      gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                          crossAxisCount: 1, childAspectRatio: 1.18),
                      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: () {
                                        print(index);
                                        
                                        // imagesUrl = null;
                                        setState(() {
                                          videoUrl = null;
                                          str = null;
                                          _controller.pause();
                                          // player.reset();
                                        });
                                      },
                                      child: Icon(
                                        IconData(0xe62a, fontFamily: "myfont"),
                                        size: 24.0,
                                        color: Color(0xff999999),
                                      ),
                                    ),
                                  )
                                : Container(
                                    child: null,
                                  )
                          ],
                        );
                      },
                    ),
                  ),
                  Container(
                    height: ScreenUtil().setWidth(44),
                    decoration: BoxDecoration(
                      borderRadius:
                          BorderRadius.circular(ScreenUtil().setWidth(22)),
                      gradient: const LinearGradient(
                          colors: [Color(0xFF00D9FF), Color(0xFF0287FF)]),
                    ),
                    margin: EdgeInsets.all(20.0),
                    width: double.infinity,
                    child: FlatButton(
                      // padding: EdgeInsets.all(15.0),
                      child: Text("提交"),
                      // color: Theme
                      //     .of(context)
                      //     .primaryColor,
                      textColor: Colors.white,
                      onPressed: () {
                        /*
                        * 如果：context不对。可以使用GlobalKey，
                        * 通过_formKey.currentState 获取FormState后，
                        * 调用validate()方法校验用户名密码是否合法，校验
                        * 通过后再提交数据。 
                        */
                        if ((_formKey.currentState as FormState).validate()) {
                          submitApply();
                        }
                      },
                    ),
                  ),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }

  Widget videoPlay() {
    
    _controller = VideoPlayerController.network(
                                        Utils.getImagePath(videoUrl) 
                                        // imgFontUrl + detailObj.url
                                        );
    double width = MediaQuery.of(context).size.width;
    return 
    // Container(
    //                     width: width,
    //                     height: width*0.6,
    //                     alignment: Alignment.center,
    //                     child: FijkView(
    //                       player: player,
    //                       color: Colors.black,
    //                       fit:FijkFit.fill,
    //                       // cover: NetworkImage(detailObj.cover),
    //                       // cover: new Image(image: detailObj.cover!=null&& detailObj.cover!=""?NetworkImage(detailObj.cover):AssetImage("assets/images/video_image.png"),).image,
    //                       // 
    //                     ),
    //                   );
    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(
                                    //     imgFontUrl + detailObj.url
                                    //     ),
                                    _controller,
                                aspectRatio: 3 / 2,
                                allowFullScreen:false,
                                autoPlay: false,
                                looping: true,
                                // startAt: Duration(seconds: 1,minutes: 1),
                                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,
                                ),
                              ),
                            ),

                            
                            
                          )
                      );
  }
}
