import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/screen_util.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:hyzp_ybqx/components/commonFun.dart';
import 'package:hyzp_ybqx/components/customDialogF.dart';
import 'package:hyzp_ybqx/services/EventBus.dart';
import 'package:hyzp_ybqx/widget/customRadioWidget.dart';

import '../../../components/customDialogH.dart';
import '../../../components/customDialogJ.dart';
import '../../../components/dioFun.dart';
import '../../../components/doJSON.dart';
import '../../../components/hyxx_data_handle.dart';

class SbbjContent extends StatefulWidget {
  //SbbjContent({Key key, this.title, this.mapData}) : super(key: key);
  SbbjContent({
    @required this.title,
    @required this.index,
    @required this.hyshlx,
    Key key,
  }) : super(key: key);
  String title;
  int index = -1;
  String hyshlx;

  _SbbjPageState createState() => _SbbjPageState();
}

class _SbbjPageState extends State<SbbjContent> {
  Map _mapGetSbbjGetDataText = {
    "id": "主键ID",
    "bjlx": "设备类型",
    "content": "报警内容",
    "dwip": "点位IP",
    "sbip": "设备IP",
    "addtime": "添加时间",
    "workflow": "处理状态"
  };

  Map _mapGetSbbjGetData = {
    "id": 1177,
    "bjlx": "风扇",
    "content": "串口COM1获取风扇异常数据",
    "dwip": "172.16.3.1",
    "sbip": "192.168.1.10",
    "addtime": "2021-02-07 23:56:45",
    "workflow": 999
  };

  List<TextEditingController> _listController = [];
  int listLen = 0;
  String nums = '';
  int _selectedRadio = 0;

  void initState() {
    // TODO: implement initState
    super.initState();
    listLen = listSbbjGetList2.length;
    getListFlields();
  }

  //监听登录页面销毁的事件
  dispose() {
    _controller.dispose();
    super.dispose();
  }

  getListFlields() async {
    //获取指定id的sbbj记录数据返回 _mapGetSbbjGetData。由于 sbbj 信息需要进行查核处理，所以要重新读取最新的记录数据
    _mapGetSbbjGetData =
        await getLedXsxxGetData(id: listSbbjGetList2[widget.index]['id'], theSbgllx: widget.hyshlx);
    print('_mapGetSbbjGetData = ${_mapGetSbbjGetData}');

    //_mapGetSbbjGetData = listSbbjGetList2[widget.index];
    _listController = List.generate(_mapGetSbbjGetData.length, (index) {
      String key = _mapGetSbbjGetData.keys.elementAt(index);

      String strContent = _mapGetSbbjGetData[key].toString();
      //时间戳转换
      if (strContent.isNotEmpty && 'addtime' == key) {
        strContent = getDate(strContent);
      }
      //workflow转换
      if (strContent.isNotEmpty && 'workflow' == key) {
        strContent = strContent == '999' ? '已处理' : '待处理';
      }
      var controller = TextEditingController(text: strContent);

      controller.selection = TextSelection.fromPosition(
        TextPosition(affinity: TextAffinity.downstream, offset: '${controller.text}'.length),
      );
      return controller;
    });
    getPreBtn_NextBtn();
    nums = '${(widget.index + 1).toString()} / $listLen';
    setState(() {});
  }

  Widget getTrail(String key, int index, double widthTrail) {
    if (0 == _listController.length) {
      return Container(width: widthTrail);
    }

    //print('key = $key');
    if ('avatar' == key) {
      imagePath = _listController[index].text;
      return getAvatar(width: widthTrail);
    } else {
      return Container(
        alignment: Alignment(-1, 0),
        //widthTrail = 400报错，360刚能显示，300换行，260
        width: widthTrail,
        //解决信息显示不全问题
        child: Text(_listController[index].text,
            style: TextStyle(fontSize: 16), textAlign: TextAlign.left),
      );
    }
  }

  Widget getTrail0(String key, int index, double widthTrail) {
    if (0 == _listController.length) {
      return Container(width: widthTrail);
    }

    //print('key = $key');
    if ('avatar' == key) {
      imagePath = _listController[index].text;
      return getAvatar(width: widthTrail);
    } else {
      return Container(
        alignment: Alignment(1, 0),
        //widthTrail = 400报错，360刚能显示，300换行，260
        width: widthTrail,
        child: TextField(
          //textAlign: TextAlign.right,
          style: TextStyle(fontSize: 16),
          decoration: InputDecoration(
            //hintText: '請輸入字段信息',
            border: InputBorder.none, //TextField去掉下划线
            contentPadding: EdgeInsets.only(right: 0),
          ),
          controller: _listController[index],
          enabled: 'content' == key ? true : false,
          //解决报警信息显示不全问题，但软键盘会弹出，很难控制键盘弹出问题
          //利用控制器初始化文本
          onChanged: null,
        ),
      );
    }
  }

  Future<String> doContacts() async {
    bFlash = false;
    return showDialog(
      context: context,
      builder: (BuildContext context) {
        return customDialogH(
          title: "请选择头像修改操作",
          content: "头像修改",
          index: 0,
        );
      },
    ).then((value) {
      imagePath = value;
      print('Page2_Contacts bFlash = $bFlash');
      if (imagePath.isNotEmpty) {
        _image = Image.file(File(imagePath), fit: BoxFit.cover);
        setState(() {});
      }
    });
  }

  //Image.file(this._image);
  String imagePath = '';
  Image _image;

  Widget getAvatar({double width = 260.0}) {
    if (imagePath.isEmpty) {
      _image = Image.asset('assets/images/user.png', fit: BoxFit.cover);
    } else {
      String head = imagePath.substring(0, 4).trim().toLowerCase();
      if ('http' == head) {
        _image = Image.network(imagePath, fit: BoxFit.cover);
      }
    }
    return Container(
      alignment: Alignment(-1, 0),
      width: width,
      child: InkWell(
        onTap: () async {
          doContacts();
        },
        child: Container(
          width: 40,
          child: _image,
        ),
      ),
    );
  }

  //添加、修改、删除联系人对话框
  doContacts2(String key, int index) async {
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return CustomDialogJ(
          theKey: key,
          index: index,
        );
      },
    );
  }

  static onNullFun() {}

  Widget _getListTile(String key, int index, double widthTrail,
      {onTapFun = onNullFun, onLongPressFun = onNullFun, size = 16.0}) {
    //print('key = $key, index = $index');
    return ListTile(
      //leading: new Icon(Icons.phone),
      title: Text((index + 1).toString() + ". " + '${_mapGetSbbjGetDataText[key]} ：',
          style: TextStyle(fontSize: 16)),
      trailing: getTrail(key, index, widthTrail),
      contentPadding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 0),
      enabled: true,
      onTap: () async {
        // print('第 $index 项被点击了');
        // await doContacts2(key, index);
        // if ('avatar' == key) {
        //   print('选择图片或拍照');
        //   await doContacts();
        // }
      },
      onLongPress: () {},
    );
  }

  TextEditingController _controller = TextEditingController.fromValue(TextEditingValue(
      text: '已做简单处理。低级故障，不影响系统运行',
      // 保持光标在最后
      selection: TextSelection.fromPosition(
          TextPosition(affinity: TextAffinity.downstream, offset: '已处理'.length))));

  //7、得到核查处理意见组件
  Widget getClyj(int index, bool _bCheck) {
    if (_bCheck) {
      _controller.text = '';
    } else {
      _controller.text = (0 == _selectedRadio ? '已做简单处理。低级故障，不影响系统运行' : '已核查，属于误报');
    }
    return ConstrainedBox(
      constraints: BoxConstraints(
        minWidth: double.infinity, //宽度尽可能大
        //minHeight: _listTileHeight, //最小高度
        maxHeight: _heigth, //最大高度
      ),
      child: Row(
        mainAxisAlignment: MainAxisAlignment.start,
        crossAxisAlignment: CrossAxisAlignment.baseline,
        children: <Widget>[
          SizedBox(width: _marginLeft),
          Text('处理意见：',
              style: TextStyle(
                  fontSize: _fontSize,
                  color: _bCheck
                      ? Colors.grey
                      : 0 == _selectedRadio
                          ? Colors.red
                          : Colors.green)),
          Container(
            alignment: Alignment(-1, 0),
            height: _heigth,
            //widthTrail = 400报错，360刚能显示，300换行，260
            width: 240,
            child: TextField(
              //textAlign: TextAlign.right,
              //style: TextStyle(fontSize: _fontSize, color: cpysList[getIndexOfCpysList(colorText: topTabs_map['cpysText_List'][i])].cpysFont),
              //style: TextStyle(fontSize: _fontSize, color: cpysList[getIndexOfCpysList(colorText: myCpys)].cpysFont),
              style: TextStyle(fontSize: _fontSize),
              textAlign: TextAlign.left,
              decoration: InputDecoration(
                hintText: _bCheck ? '' : '請輸入审核意见',
                //border: InputBorder.none, //TextField去掉下划线
                //contentPadding: EdgeInsets.only(right: 0),
                //contentPadding: EdgeInsets.symmetric(vertical: _textFieldHeight),
                contentPadding: EdgeInsets.only(left: 4, right: 4), //这行代码是关键，设置这个之后，居中
                //contentPadding: EdgeInsets.zero, //这行代码是关键，设置这个之后，居中
                border: OutlineInputBorder(
                  borderSide: BorderSide(color: Colors.grey[600]),
                  //borderSide: BorderSide.none,
                  borderRadius: BorderRadius.circular(3),
                ),
              ),
              controller: _controller,
              maxLines: 1,
              minLines: 1,
              //maxLengthEnforced: false,
              //maxLength: 10,
              enabled: !_bCheck,
              //利用控制器初始化文本
              onChanged: (value) {
                _controller.text = value;
              },
            ),
          ),
        ],
      ),
    );
  }

  double _heigth = 30;
  double _fontSize = 16;
  double _marginLeft = 15;

  @override
  Widget build(BuildContext context) {
    bool bCheck = _mapGetSbbjGetData['workflow'] == 999; //已处理
    return Scaffold(
      // appBar: AppBar(
      //   title: Text("设备报警信息详情（$nums）"),
      //   centerTitle: true,
      // ),
      appBar: PreferredSize(
        preferredSize: Size.fromHeight(ScreenUtil().setHeight(173)), // 设置appBar高度
        // 设置appBar高度
        child: AppBar(
          automaticallyImplyLeading: false,
          centerTitle: true,
          titleSpacing: 0.0,
          //设置title的左边距
          flexibleSpace: Container(
            //SizedBox(height: ScreenUtil().statusBarHeight), //显示顶部状态栏
            // SizedBox(height: ScreenUtil().setHeight(10)), //显示顶部状态栏
            padding: EdgeInsets.only(top: ScreenUtil().statusBarHeight), //留出顶部状态栏高度
            child: Container(
              //height: ScreenUtil().setHeight(173),
              decoration: BoxDecoration(
                gradient: LinearGradient(
                  begin: Alignment.centerLeft,
                  end: Alignment.centerRight,
                  colors: [
                    Color.fromRGBO(12, 186, 156, 1),
                    Color.fromRGBO(39, 127, 235, 1),
                  ],
                ),
              ),
              // decoration: BoxDecoration(
              //   gradient: LinearGradient(colors: [
              //     Color(0xFF0018EB),
              //     Color(0xFF01C1D9),
              //   ], begin: Alignment.bottomCenter, end: Alignment.topCenter),
              // ),
            ),
          ),
          title: Padding(
            padding: EdgeInsets.only(left: 0, right: 0),
            child: Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                getIconAndTextButton(
                  iconColor: Colors.white,
                  iconData: Icons.chevron_left_outlined,
                  onPress: () {
                    Navigator.pop(context);
                  },
                ),
                Expanded(
                  child: Text("设备报警信息详情（$nums）",
                      style: TextStyle(color: Colors.white, fontSize: 20),
                      textAlign: TextAlign.center,
                      overflow: TextOverflow.ellipsis),
                ),
                SizedBox(width: 50),
              ],
            ),
          ),
        ),
      ),
      body: Container(
        child: Column(
          children: <Widget>[
            Expanded(
              //https://www.it1352.com/2028416.html
              //用Map而不是List的Flutter ListView.builder(Flutter listview with Map instead of List)
              //使用ListView.separated设置分割线ListView.separated(
              //child: ListView.separated(  //这种方式不能设置每项高度，每页只能有7项
              child: ListView.builder(
                //这种方式可以通过itemExtent设置每项高度，每页可以有9项
                //separatorBuilder: (BuildContext context, int index) => index %2 ==0? Divider(color: Colors.green) : Divider(color: Colors.red),//index为偶数，创建绿色分割线；index为奇数，则创建红色分割线
                //separatorBuilder: (BuildContext context, int index) => Divider(),
                //itemExtent: 57.0, //列表项高度。56越界、57刚好。还是自动计算最好
                itemCount: _mapGetSbbjGetData.length,
                itemBuilder: (BuildContext context, index) {
                  String key = _mapGetSbbjGetData.keys.elementAt(index);
                  return Column(
                    children: <Widget>[
                      _getListTile(key, index, 200.0),
                      Divider(
                        height: 1.0,
                      ),
                    ],
                  );
                },
              ),
            ),
            //7、得到核查处理意见组件
            Divider(height: 1.0, color: Colors.blue),
            SizedBox(height: 15),
            getClyj(widget.index, bCheck),
            SizedBox(height: 10),
            //8、处理结果
            Container(
              height: _heigth,
              child: Row(
                mainAxisAlignment: MainAxisAlignment.start,
                children: <Widget>[
                  SizedBox(width: _marginLeft),
                  Text('处理结果：',
                      style: TextStyle(
                          fontSize: _fontSize,
                          color: bCheck
                              ? Colors.grey
                              : 0 == _selectedRadio
                                  ? Colors.red
                                  : Colors.green)),
                  CustomRadioWidget(
                    value: 0,
                    title: "已处理",
                    fontSize: _fontSize,
                    width: 120,
                    groupValue: _selectedRadio,
                    onChanged: bCheck
                        ? null
                        : (int value) {
                            _selectedRadio = value;
                            //黑烟初审数据审核Radio选项改变广播
                            //eventBus.fire(HycsDataAuditRadioEvent('黑烟初审数据审核Radio选项已改变', _selectedRadio));
                            _controller.text = '已做简单处理。低级故障，不影响系统运行';
                            setState(() {});
                            print('selectedRadio = ${_selectedRadio.toString()}');
                          },
                  ),
                  SizedBox(width: 20),
                  CustomRadioWidget(
                    value: 1,
                    title: "误报",
                    fontSize: _fontSize,
                    width: 100,
                    groupValue: _selectedRadio,
                    onChanged: bCheck
                        ? null
                        : (int value) {
                            _selectedRadio = value;
                            //黑烟初审数据审核Radio选项改变广播
                            //eventBus.fire(HycsDataAuditRadioEvent('黑烟初审数据审核Radio选项已改变', _selectedRadio));
                            _controller.text = '已核查，属于误报';
                            setState(() {});
                            print('selectedRadio = ${_selectedRadio.toString()}');
                          },
                  ),
                ],
              ),
            ),
            SizedBox(height: 10),
            Divider(height: 1.0, color: Colors.blue),
            SizedBox(height: 15),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: <Widget>[
                getBtnSizeX(
                    text: "处理",
                    onPressedFun: bCheck
                        ? null
                        : () async {
                            int ret = -1;
                            print('等待处理确认');
                            await Navigator.of(context)
                                .push(
                              PageRouteBuilder(
                                opaque: false,
                                pageBuilder: (context, animation, secondaryAnimation) =>
                                    CustomDialogF(title: '处理确认', content: '是否进行设备报警信息核查处理？'),
                              ),
                            )
                                .then((value) async {
                              print('value = $value');
                              if (value) {
                                print('用户已确认，开始处理报警信息核查处理！');
                                // sbglContentFirstAudit 整型返回值：更新的结果，1表示成功，0表示无更新，false表示失败
                                ret = await sbglContentAudit(
                                  sbgllx: widget.hyshlx,
                                  sbglID: _mapGetSbbjGetData['id'],
                                  shuoming: _controller.text,
                                  title: 0 == _selectedRadio ? '已处理' : '误报',
                                );

                                if (1 == ret) {
                                  eventBus.fire(SbglDataUpdateEvent(
                                      '${mapHyshlx[widget.hyshlx]['text']}数据已更新'));
                                  print('${mapHyshlx[widget.hyshlx]['text']}结果已成功上传服务器。');
                                }
                              } else {
                                print('用户取消了报警信息核查处理');
                              }
                            });
                            Navigator.pop(context, ret);
                          }),
                //getBtnSizeX(text: "删除", onPressedFun: () async {}),
                preBtn,
                nextBtn,
              ],
            ),
            SizedBox(height: 20),
          ],
        ),
      ),
    );
  }

  //解决第一次进入报错问题。因为getPreBtn_NextBtn()还未执行，preBtn和nextBtn为空
  Widget preBtn = Container(
    color: Colors.white12, //onPressedFun为null时无效
    width: 70.0,
    height: 35.0,
    child: RaisedButton(
      padding: EdgeInsets.all(0),
      textColor: Colors.black,
      child: Text('上一条'),
      onPressed: null,
    ),
  );

  Widget nextBtn = Container(
    color: Colors.white12, //onPressedFun为null时无效
    width: 70.0,
    height: 35.0,
    child: RaisedButton(
      padding: EdgeInsets.all(0),
      textColor: Colors.black,
      child: Text('下一条'),
      onPressed: null,
    ),
  );

  getPreBtn_NextBtn() {
    preBtn = getBtnSizeX(
      text: "上一条",
      onPressedFun: null,
    );
    nextBtn = getBtnSizeX(
      text: "下一条",
      onPressedFun: null,
    );

    if (widget.index > 0 && listLen > 0) {
      preBtn = getBtnSizeX(
        text: "上一条",
        onPressedFun: () async {
          if (widget.index > 0) {
            widget.index--;
            getListFlields();
          }
        },
      );
    }

    if (widget.index < (listLen - 1) && listLen > 0) {
      nextBtn = getBtnSizeX(
        text: "下一条",
        onPressedFun: () async {
          if (widget.index < listLen - 1) {
            widget.index++;
            getListFlields();
          }
        },
      );
    }
  }

  Widget getBtnSizeX({@required text, width = 70.0, height = 35.0, onPressedFun}) {
    return Container(
      color: Colors.white12, //onPressedFun为null时无效
      width: width,
      height: height,
      child: RaisedButton(
        padding: EdgeInsets.all(0),
        textColor: Colors.black,
        child: Text(text),
        onPressed: onPressedFun,
      ),
    );
  }
}
