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

import 'package:eitc_erm_app/bean/normal_response.dart';
import 'package:eitc_erm_app/utils/Component.dart';
import 'package:eitc_erm_app/utils/Constants.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:http/http.dart' as http;

import 'login.dart';

class ChangePasswordPage extends StatefulWidget {
  @override
  _ChangePasswordPageState createState() => _ChangePasswordPageState();
}

class _ChangePasswordPageState extends State<ChangePasswordPage> {
  final _formKey = GlobalKey<FormState>();
  String phoneNo = '';
  String _newPassword = '';
  String _confirmPassword = '';
  bool _isLoading = false;
  bool isButtonEnable = true;
  int count = 60;
  late Timer timer;
  String buttonText = '发送验证码';
  TextEditingController mController = TextEditingController();

  void _buttonClickListen() {
    setState(() {
      sendCaptchaCode();
      if (isButtonEnable) {
        //当按钮可点击时
        isButtonEnable = false; //按钮状态标记
        _initTimer();
        return null; //返回null按钮禁止点击
      } else {
        //当按钮不可点击时
//  debugPrint('false');
        return null; //返回null按钮禁止点击
      }
    });
  }

  void _initTimer() {
    timer = Timer.periodic(const Duration(seconds: 1), (Timer timer) {
      count--;
      setState(() {
        if (count == 0) {
          timer.cancel(); //倒计时结束取消定时器
          isButtonEnable = true; //按钮可点击
          count = 60; //重置时间
          buttonText = '发送验证码'; //重置按钮文本
        } else {
          buttonText = '重新发送($count)'; //更新文本内容
        }
      });
    });
  }

  @override
  void dispose() {
    timer?.cancel();
    super.dispose();
  }

  Future<void> _changePassword(
      {required String newPassword, required String phoneNo}) async {
    var params = {
      'phoneNumber': phoneNo,
      'password': newPassword,
      'confirmPassword': newPassword,
      'captchaCode': mController.text,
    };
    Map<String, String> headers = {
      'token': '${Global.token}',
    };
    final response = await http
        .post(Uri.parse('${Global.BaseUrl}user/setPassword'), headers: {
      HttpHeaders.contentTypeHeader: "application/json; charset=utf-8",
      'token': '${Global.token}',
    }, body: jsonEncode(params));
    setState(() {
      _isLoading = true;
    });
    try {
      final jsonString = utf8.decode(response.bodyBytes);
      final jsonResponse = jsonDecode(jsonString);
      print(jsonString);
      NormalResponse mNormalResponse =
      new NormalResponse.fromJson(jsonResponse);
      if (mNormalResponse.code == Global.responseSuccessCode) {
        Component.toast("密码修改成功！", 2);
        Navigator.of(context).pop();
        Navigator.pushReplacement(
          context,
          MaterialPageRoute(builder: (context) => Login()),
        );
      } else {
        Component.toast(mNormalResponse.msg.toString(), 0);
        }
    } catch (e) {
      Component.toast("异常: $e", 0);
    } finally {
      setState(() {
        _isLoading = false;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: new AppBar(
        title: new Text('修改密码',
            style: TextStyle(
              color: Colors.white,
            )),
        centerTitle: true,
        elevation: 0.5,
        backgroundColor: Global.StatusBarColor,
        leading: new IconButton(
          tooltip: '返回上一页',
          icon: const Icon(Icons.arrow_back_ios, color: Colors.white,),
          onPressed: () {
            Navigator.of(context).pop();
            //_nextPage(-1);
          },
        ),
      ),
      body: Form(
        key: _formKey,
        child: Padding(
          padding: const EdgeInsets.all(20.0),
          child: Column(
            children: <Widget>[
              SizedBox(height: 30.0),
              TextFormField(
                enabled: false,
                decoration: InputDecoration(
                  labelText: '手机号',
                ),
                initialValue: Global.loginPhoneNo,
                onSaved: (value) => phoneNo = value!,
              ),
              TextFormField(
                decoration: InputDecoration(labelText: '新密码'),
                obscureText: true,
                onSaved: (value) => _newPassword = value!,
              ),
              TextFormField(
                decoration: InputDecoration(labelText: '确认新密码'),
                obscureText: true,
                onSaved: (value) => _confirmPassword = value!,
              ),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                crossAxisAlignment: CrossAxisAlignment.baseline,
                textBaseline: TextBaseline.alphabetic,
                children: <Widget>[
                  Expanded(
                    child: Padding(
                      padding: EdgeInsets.only(left: 0, right: 15, top: 15),
                      child: TextFormField(
                        maxLines: 1,
                        onSaved: (value) {},
                        controller: mController,
                        textAlign: TextAlign.left,
                        inputFormatters: [
                          FilteringTextInputFormatter.digitsOnly,
                          LengthLimitingTextInputFormatter(6)
                        ],
                        decoration: const InputDecoration(
                          hintText: ('请输入验证码'),
                          contentPadding: EdgeInsets.only(top: -5, bottom: 0),
                          alignLabelWithHint: true,
                          // border:
                          // OutlineInputBorder(borderSide: BorderSide.none),
                        ),
                      ),
                    ),
                  ),
                  Container(
                    padding: const EdgeInsets.all(0),
                    width: 120,
                    child: ElevatedButton(
                      style: ButtonStyle(
                        backgroundColor:
                        MaterialStateProperty.resolveWith<Color>(
                                (states) {
                              if (states.contains(MaterialState.disabled)) {
                                return Colors.brown; // Disabled color
                              }
                              return Colors.blue; // Regular color
                            }),
                        foregroundColor: MaterialStateProperty.all(
                            isButtonEnable
                                ? Colors.white
                                : Colors.black.withOpacity(0.2)),
                      ),
                      // backgroundColor  : isButtonEnable
                      //     ? Color(0xff44c5fe)
                      //     : Colors.grey.withOpacity(0.1), //按钮的颜色
                      // splashColor: isButtonEnable
                      //     ? Colors.white.withOpacity(0.1)
                      //     : Colors.transparent,
                      // shape: StadiumBorder(side: BorderSide.none),
                      onPressed: () {
                        setState(() {
                          _buttonClickListen();
                        });
                      },
                      child: Text(
                        buttonText,
                        style: TextStyle(
                          fontSize: 12,
                        ),
                      ),
                    ),
                  ),
                ],
              ),
              Container(
                width: double.infinity,
                height: 45,
                margin: EdgeInsets.only(top: 40, left: 10, right: 10),
                child: ElevatedButton(
                  style: ButtonStyle(
                    backgroundColor:
                        MaterialStateProperty.resolveWith<Color>((states) {
                      return Colors.blue; // Regular color
                    }),
                  ),
                  child: _isLoading
                      ? CircularProgressIndicator(
                          valueColor:
                              AlwaysStoppedAnimation<Color>(Colors.white),
                        )
                      : Text(
                          '修改密码',
                          style: TextStyle(color: Colors.white, fontSize: 15),
                        ),
                  onPressed: _isLoading
                      ? null
                      : () {
                          if (_formKey.currentState!.validate()) {
                            _formKey.currentState?.save();
                            if (_newPassword != _confirmPassword) {
                              Component.toast("两次密码输入不一致", 0);
                              return;
                            }
                            _changePassword(
                              phoneNo: phoneNo,
                              newPassword: _newPassword,
                            );
                          }
                        },
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }

  Future<String?> sendCaptchaCode() async {
    var params = {
      'phoneNumber': Global.loginPhoneNo,
    };
    var response = await http
        .post(Uri.parse(Global.BaseUrl + 'sendCaptchaCode'), body: params);

    if (response.statusCode == 200) {
      final jsonString = utf8.decode(response.bodyBytes);
      final jsonResponse = jsonDecode(jsonString);
      print(jsonResponse);
      NormalResponse mNormalResponse =
      new NormalResponse.fromJson(jsonResponse);
      if (mNormalResponse.code == Global.responseSuccessCode) {
        Component.toast("短信发送成功，请查收！", 2);
      } else {
        Component.toast(mNormalResponse.msg.toString(), 0);
      }
      return response.toString();
    } else {
      Component.toast("出错了，请稍后再试！", 0);
      return null;
    }
  }
}
