
import 'dart:convert';

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:healthcare_user/common/dashboard.dart';
import 'package:healthcare_user/common/settings.dart';
import 'package:image_picker/image_picker.dart';
import 'dart:io';


class UpdateProfile extends StatefulWidget {
  const UpdateProfile({Key? key}) : super(key: key);
  @override
  State<UpdateProfile> createState() => _UpdateprofileState();
}

class _UpdateprofileState extends State<UpdateProfile> {

  bool isPwdObscureText=true;
  bool isConfirmPwdObscureText=true;
  TextEditingController nameController = TextEditingController();
  TextEditingController mobileNumberController = TextEditingController();
  TextEditingController emailController = TextEditingController();
  TextEditingController ageController = TextEditingController();




  @override
  void initState() {
    isPwdObscureText=true;
    isConfirmPwdObscureText=true;
    nameController.text=AppSettings.userName;
    mobileNumberController.text=AppSettings.phoneNumber;
    emailController.text=AppSettings.email;
    ageController.text=AppSettings.age;

    super.initState();


  }

  final ImagePicker _picker = ImagePicker();

  Future pickImageFromGallery() async {
    try {
      final image = await _picker.pickImage(source: ImageSource.gallery);
      if (image == null) return;
      final imageTemp = File(image.path);
      AppSettings.preLoaderDialog(context);
      var res = await AppSettings.uploadImageHTTPNew(image);
      print(jsonDecode(res));
      Navigator.of(context, rootNavigator: true).pop();
      setState(() {
        AppSettings.profilePictureUrl = jsonDecode(res)['picture'];
      });
      AppSettings.saveData('profile', jsonDecode(res)['picture'], 'STRING');
    } on PlatformException catch (e) {
      print('Failed to pick image: $e');
    }
  }

  Future takeImageFromCamera() async {
    try {
      final image = await _picker.pickImage(source: ImageSource.camera);
      if (image == null) return;
      final imageTemp = File(image.path);
      AppSettings.preLoaderDialog(context);
      var res = await AppSettings.uploadImageHTTPNew(image);
      print(jsonDecode(res));
      Navigator.of(context, rootNavigator: true).pop();
      setState(() {
        AppSettings.profilePictureUrl = jsonDecode(res)['picture'];
      });
      AppSettings.saveData('profile', jsonDecode(res)['picture'], 'STRING');
    } on PlatformException catch (e) {
      print('Failed to pick image: $e');
    }
  }


  @override
  Widget build(BuildContext context) {

    return Scaffold(
        appBar:AppSettings.appBar('Edit Profile'),
        body: Stack(children: <Widget>[
          Container(
            decoration: const BoxDecoration(
             /* image: DecorationImage(
                image: AssetImage("images/backgroundimage.png"),
                fit: BoxFit.cover,
              ),*/
            ),
          ),
          GestureDetector(
            onTap: () {
              FocusScope.of(context).requestFocus(new FocusNode());
            },
            child: SafeArea(
                child: SingleChildScrollView(
                  child: Column(
                    children: <Widget>[
                      SizedBox(
                        height: 40,
                      ),
                      /*Container(
                          child: Image(
                            image: AssetImage('images/logo.png'),
                            height: MediaQuery.of(context).size.height * .10,
                          )),*/
                      Container(child:  GestureDetector(
                        child: Container(
                          width: MediaQuery.of(context).size.width * .30,
                          height: MediaQuery.of(context).size.height * .20,
                          decoration: BoxDecoration(
                              shape: BoxShape.circle,
                              image: DecorationImage(
                                  image: (AppSettings.profilePictureUrl != ''&& AppSettings.profilePictureUrl != 'null') ? NetworkImage(AppSettings.profilePictureUrl) as ImageProvider : AssetImage("images/profile_pic.png"), // picked file
                                  fit: BoxFit.fitWidth)),
                        ),
                        onTap: () {
                          showModalBottomSheet<void>(
                              context: context,
                              builder: (BuildContext context) {
                                return SizedBox(
                                  height: 200,
                                  child: Center(
                                    child: Row(
                                      mainAxisAlignment: MainAxisAlignment.center,
                                      children: <Widget>[
                                        GestureDetector(
                                          child: Icon(
                                            Icons.camera_alt_outlined,
                                            size: 100,
                                            color: primaryColor,
                                          ),
                                          onTap: () async {
                                            await takeImageFromCamera();
                                            Navigator.pop(context);
                                          },
                                        ),
                                        SizedBox(
                                          width:
                                          MediaQuery.of(context).size.width * .20,
                                        ),
                                        GestureDetector(
                                          child: Icon(
                                            Icons.photo,
                                            size: 100,
                                            color: primaryColor,
                                          ),
                                          onTap: () async {
                                            await pickImageFromGallery();
                                            Navigator.pop(context);
                                          },
                                        ),
                                      ],
                                    ),
                                  ),
                                );
                              });
                        },
                      ),),
                      SizedBox(
                        height: 10,
                      ),
                      Container(
                        padding: const EdgeInsets.all(10),
                        child: TextFormField(
                          cursorColor: greyColor,
                          controller: nameController,
                          decoration: const InputDecoration(
                            prefixIcon: Icon(
                              Icons.person,
                              color: greyColor,
                            ),
                            border: OutlineInputBorder(
                                borderSide: BorderSide(color: greyColor)),
                            focusedBorder: OutlineInputBorder(
                              borderSide: BorderSide(color: greyColor),
                            ),
                            enabledBorder: OutlineInputBorder(
                              borderSide: BorderSide(color: greyColor),
                            ),
                            labelText: 'Username',
                            labelStyle: TextStyle(
                              color: greyColor, //<-- SEE HERE
                            ),
                          ),
                        ),
                      ),//name
                      const SizedBox(
                        height: 15,
                      ),
                      Container(
                        padding: const EdgeInsets.all(10),
                        child: TextFormField(
                          cursorColor: greyColor,
                          controller: emailController,
                          decoration: const InputDecoration(
                            prefixIcon: Icon(
                              Icons.email,
                              color: greyColor,
                            ),
                            border: OutlineInputBorder(
                                borderSide: BorderSide(color: greyColor)),
                            focusedBorder: OutlineInputBorder(
                              borderSide: BorderSide(color: greyColor),
                            ),
                            enabledBorder: OutlineInputBorder(
                              borderSide: BorderSide(color: greyColor),
                            ),
                            labelText: 'Enter email ID',
                            labelStyle: TextStyle(
                              color: greyColor, //<-- SEE HERE
                            ),
                          ),
                        ),
                      ), //email
                      SizedBox(
                        height: 10,
                      ),
                      Container(
                        padding: const EdgeInsets.all(10),
                        child: TextFormField(
                          cursorColor: greyColor,
                          controller: mobileNumberController,
                          decoration: const InputDecoration(
                            prefixIcon: Icon(
                              Icons.phone_android,
                              color: greyColor,
                            ),
                            border: OutlineInputBorder(
                                borderSide: BorderSide(color: greyColor)),
                            focusedBorder: OutlineInputBorder(
                              borderSide: BorderSide(color: greyColor),
                            ),
                            enabledBorder: OutlineInputBorder(
                              borderSide: BorderSide(color: greyColor),
                            ),
                            labelText: 'Enter Mobile Number',
                            labelStyle: TextStyle(
                              color: greyColor, //<-- SEE HERE
                            ),
                          ),
                        ),
                      ), //mobile
                      SizedBox(
                        height: 10,
                      ),

                      SizedBox(
                        height: 10,
                      ),
                      Container(
                        padding: const EdgeInsets.all(10),
                        child: TextFormField(
                          cursorColor: greyColor,
                          controller: ageController,
                          decoration: const InputDecoration(
                            prefixIcon: Icon(
                              Icons.person,
                              color: greyColor,
                            ),
                            border: OutlineInputBorder(
                                borderSide: BorderSide(color: greyColor)),
                            focusedBorder: OutlineInputBorder(
                              borderSide: BorderSide(color: greyColor),
                            ),
                            enabledBorder: OutlineInputBorder(
                              borderSide: BorderSide(color: greyColor),
                            ),
                            labelText: 'Enter age',
                            labelStyle: TextStyle(
                              color: greyColor, //<-- SEE HERE
                            ),
                          ),
                        ),
                      ),
                      Container(
                          padding: const EdgeInsets.fromLTRB(10, 0, 10, 0),
                          child: ElevatedButton(
                            style: ElevatedButton.styleFrom(
                              primary: primaryColor, // background
                              onPrimary: Colors.white, // foreground
                            ),
                            onPressed: () async{

                              int age=0;
                              if(ageController.text.toString()!=''){
                                age=int.parse(ageController.text.toString());
                              }
                              else{
                                age=0;
                              }

                              var payload = new Map<String, dynamic>();
                              payload["username"] = nameController.text.toString();
                              payload["phone"] = mobileNumberController.text.toString();
                              payload["age"] = age;
                              payload["emails"] = [{"email":emailController.text.toString()}];
                              bool signUpStatus = await AppSettings.updateProfile(payload);
                              try{
                                if (signUpStatus) {
                                  Navigator.pop(context);
                                  Navigator.push(
                                    context,
                                    MaterialPageRoute(builder: (context) => Dashboard()),
                                  );
                                  AppSettings.longSuccessToast("profile  updated");
                                } else {

                                  AppSettings.longFailedToast("profile not updated");
                                }
                              }
                              catch(exception){
                                print(exception);
                                AppSettings.longFailedToast("Please enter valid details");
                              }

                            },
                            child: Text('Update'),
                          )
                      ),

                    ],
                  ),
                )),
          ),
        ]));
  }
}
