import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:watermanagement/google_maps_place_picker_mb/google_maps_place_picker.dart';
import 'package:watermanagement/keys.dart';
import 'package:watermanagement/settings.dart';
import 'login.dart';
import 'package:geolocator/geolocator.dart';
import 'package:geocoding/geocoding.dart';
import 'package:image_picker/image_picker.dart';
import 'package:flutter/services.dart';
import 'dart:io' show File, Platform;
import 'package:google_maps_flutter_android/google_maps_flutter_android.dart';
import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart';
import 'package:location/location.dart' as locationmap;
import 'google_maps_place_picker_mb/src/models/pick_result.dart';
import 'google_maps_place_picker_mb/src/place_picker.dart';


class SignIn extends StatefulWidget {
  const SignIn({super.key});

  @override
  State<SignIn> createState() => _SignInState();
}

class _SignInState extends State<SignIn> {
  bool isPwdObscureText=true;
  bool isConfirmPwdObscureText = true;
  TextEditingController nameController = TextEditingController();
  TextEditingController supplierId = TextEditingController();
  TextEditingController emailController = TextEditingController();
  TextEditingController mobileNumberController = TextEditingController();
  TextEditingController altermobileNumberController = TextEditingController();
  TextEditingController userAddressDescriptionController = TextEditingController();
  TextEditingController userAddressCapturingController = TextEditingController();
  TextEditingController passwordController = TextEditingController();
  TextEditingController confirmPasswordController = TextEditingController();


  String _currentAddress ='';
  String address1 = '';
  String address2 = '';
  String city = '';
  String state = '';
  String zip = '';
  String country = '';
  double lat = 0;
  double lng = 0;

  PickResult? selectedPlace;
  bool _mapsInitialized = false;
  final String _mapsRenderer = "latest";

  var kInitialPosition = const LatLng(15.462477, 78.717401);
  locationmap.Location location = locationmap.Location();

  final GoogleMapsFlutterPlatform mapsImplementation =
      GoogleMapsFlutterPlatform.instance;

  void initRenderer() {
    if (_mapsInitialized) return;
    if (mapsImplementation is GoogleMapsFlutterAndroid) {
      switch (_mapsRenderer) {
        case "legacy":
          (mapsImplementation as GoogleMapsFlutterAndroid)
              .initializeWithRenderer(AndroidMapRenderer.legacy);
          break;
        case "latest":
          (mapsImplementation as GoogleMapsFlutterAndroid)
              .initializeWithRenderer(AndroidMapRenderer.latest);
          break;
      }
    }
    setState(() {
      _mapsInitialized = true;
    });
  }


  @override
  void initState() {
    isPwdObscureText = true;
    isConfirmPwdObscureText = true;
    super.initState();
  }

  Future<bool> onWillPop() async {
    final shouldPop = await showDialog<bool>(context: context, builder: (context) {
      return AlertDialog(
        title: const Text('Do you want to exit app?',
            style: TextStyle(
              color: primaryColor,
              fontSize: 20,
            )),
        actionsAlignment: MainAxisAlignment.spaceBetween,
        actions: [
          TextButton(
            onPressed: () {
              SystemNavigator.pop();
            },
            child: const Text('Yes',
                style: TextStyle(
                  color: primaryColor,
                  fontSize: 20,
                )),
          ),
          TextButton(
            onPressed: () {
              Navigator.of(context).pop(false);
            },
            child: const Text('No',
                style: TextStyle(
                  color: primaryColor,
                  fontSize: 20,
                )),
          ),
        ],
      );
    },
    );
    return shouldPop!;
  }




  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop:()async=>onWillPop(),
      child: Scaffold(
          body: Stack(children: <Widget>[
            Container(
              decoration:  const BoxDecoration(
                image:  DecorationImage(image:AssetImage("images/bggimgg.png"), fit: BoxFit.cover,),
              ),
            ),
            GestureDetector(
              onTap: () {
                FocusManager.instance.primaryFocus?.unfocus();
              },
              child: SafeArea(
                  child: SingleChildScrollView(
                    child: Column(
                      children: <Widget>[

                        SizedBox(
                          height: 15,
                        ),
                        Container(
                          //width: double.infinity,
                            child: Image(
                              image: const AssetImage('images/logo.png'),
                              height: MediaQuery.of(context).size.height * .18,
                            )),

                        SizedBox(
                          height: 05,
                        ),
                        Container(
                          padding: const EdgeInsets.all(10),
                          child: TextFormField(
                            cursorColor: greyColor,
                            controller: nameController,
                            textCapitalization: TextCapitalization.sentences,
                            decoration: textFormFieldDecoration(Icons.person,'Supplier Name'),
                          ),
                        ), //n
                        const SizedBox(
                          height: 5,
                        ),



                        Container(
                          padding: const EdgeInsets.all(10),
                          child: TextFormField(
                            cursorColor: greyColor,
                            controller: emailController,
                            textCapitalization: TextCapitalization.sentences,
                            decoration: textFormFieldDecoration(Icons.email,'Enter your email'),
                          ),
                        ),

                        const SizedBox(
                          height: 5,
                        ),
                        Container(
                          padding: const EdgeInsets.all(10),
                          child: TextFormField(
                            cursorColor: greyColor,
                            controller: mobileNumberController,
                            maxLength: 10,
                            textCapitalization: TextCapitalization.sentences,
                            decoration: textFormFieldDecoration(Icons.phone,'Enter Mobile Number'),
                          ),
                        ),

                        const SizedBox(
                          height: 5,
                        ),

                        GestureDetector(
                          child:Container(
                            padding: const EdgeInsets.all(10),
                            child: TextFormField(
                              cursorColor: greyColor,
                              controller: userAddressCapturingController,
                              onTap:()
                              {
                    //=============================================================================================
                                location.serviceEnabled().then((value) {
                                  if (value) {
                                    initRenderer();
                                    Navigator.push(
                                      context,
                                      MaterialPageRoute(
                                        builder: (context) {
                                          return PlacePicker(
                                            resizeToAvoidBottomInset: false,
                                            hintText: "Find a place ...",
                                            searchingText: "Please wait ...",
                                            selectText: "Select place",
                                            outsideOfPickAreaText: "Place not in area",
                                            initialPosition: kInitialPosition,
                                            useCurrentLocation: true,
                                            selectInitialPosition: true,
                                            usePinPointingSearch: true,
                                            usePlaceDetailSearch: true,
                                            zoomGesturesEnabled: true,
                                            zoomControlsEnabled: true,
                                            onMapCreated: (GoogleMapController controller) {},
                                            onPlacePicked: (PickResult result) {
                                              setState(() {
                                                selectedPlace = result;
                                                lat=selectedPlace!.geometry!.location.lat;
                                                lng=selectedPlace!.geometry!.location.lng;
                                                if(selectedPlace!.types!.length==1){
                                                  userAddressCapturingController.text =
                                                  selectedPlace!.formattedAddress!;
                                                }
                                                else{
                                                  userAddressCapturingController.text =selectedPlace!.name!+', '+selectedPlace!.formattedAddress!;
                                                }
                                                Navigator.of(context).pop();
                                              });
                                            },
                                            onMapTypeChanged: (MapType mapType) {},
                                            apiKey: Platform.isAndroid
                                                ? APIKeys.androidApiKey
                                                : APIKeys.iosApiKey,
                                            forceAndroidLocationManager: true,
                                          );
                                        },
                                      ),
                                    );
                                  } else {
                                    showGeneralDialog(
                                      context: context,
                                      pageBuilder: (context, x, y) {
                                        return Scaffold(
                                          backgroundColor: Colors.grey.withOpacity(.5),
                                          body: Center(
                                            child: Container(
                                              width: double.infinity,
                                              height: 150,
                                              padding:
                                              const EdgeInsets.symmetric(horizontal: 20),
                                              child: Card(
                                                child: Padding(
                                                  padding: const EdgeInsets.all(10.0),
                                                  child: Column(
                                                    mainAxisAlignment: MainAxisAlignment.center,
                                                    children: [
                                                      const Text(
                                                        "Please enable the location",
                                                        style: TextStyle(
                                                          fontSize:18,
                                                          fontWeight: FontWeight.w500,
                                                        ),
                                                      ),
                                                      const SizedBox(
                                                        height: 20,
                                                      ),
                                                      ElevatedButton(
                                                        onPressed: () {
                                                          Navigator.pop(context);
                                                        },
                                                        child: const Text("Cancel"),
                                                      ),
                                                    ],
                                                  ),
                                                ),
                                              ),
                                            ),
                                          ),
                                        );
                                      },
                                    );
                                  }
                                });
                                //=====================================================================================

                               // _getCurrentPosition();
                              },
                              keyboardType: TextInputType.streetAddress,
                              readOnly: false,
                              decoration: textFormFieldDecoration(Icons.location_on_rounded,'select address from MAP'),

                            ),
                          ),
                          /*   onTap: ()
                        {
                        },*///address
                        ),//address capturing

                        const SizedBox(
                          height: 5,
                        ),
                        Container(
                          padding: const EdgeInsets.all(10),
                          child: TextFormField(
                            cursorColor: greyColor,
                            controller: userAddressDescriptionController,
                            keyboardType: TextInputType.emailAddress,
                            decoration: textFormFieldDecoration(Icons.plagiarism_outlined,'Address Description (Ex: Flat No)'),

                          ),
                        ),//address description

                        const SizedBox(
                          height: 5,
                        ),
                        Container(
                          padding: const EdgeInsets.all(10),
                          child: TextFormField(
                            cursorColor: greyColor,
                            obscureText: isPwdObscureText,
                            controller: passwordController,
                            decoration: textFormFieldDecoration(Icons.lock,'Create Password'),

                          ),
                        ), //pwd
                        const SizedBox(
                          height: 5,
                        ),
                        Container(
                            width:MediaQuery.of(context).size.width * .99,
                            height: 55,
                            padding: const EdgeInsets.fromLTRB(3, 0, 3, 0),
                            child: ElevatedButton(
                              style: ElevatedButton.styleFrom(
                                primary: primaryColor, // background
                                onPrimary: Colors.white, // foreground
                              ),
                              onPressed: () async {
                                if (nameController.text != '' &&
                                    passwordController.text != '' &&
                                    mobileNumberController.text != '') {
                                  AppSettings.preLoaderDialog(context);

                                  var payload = new Map<String, dynamic>();
                                  payload["suppliername"] = nameController.text.toString();
                                  payload["password"] = passwordController.text.toString();
                                  payload["phone"] = mobileNumberController.text.toString();
                                  payload["alternativeContactNumber"] = altermobileNumberController.text.toString();
                                  payload["emails"] = [
                                    {"email": emailController.text.toString()}
                                  ];
                                  payload["firstName"] = '';
                                  payload["lastName"] = '';
                                  payload["office_address"] = userAddressCapturingController.text;
                                  payload["address2"] = address2;
                                  payload["city"] = city;
                                  payload["state"] = state;
                                  payload["zip"] = zip;
                                  payload["country"] = country;
                                  payload["notes"] = '';
                                  payload["latitude"] = lat.toString();
                                  payload["longitude"] = lng.toString();
                                  bool signUpStatus = await AppSettings.signUp(payload);

                                  try {
                                    if (signUpStatus) {
                                      var phoneVerifyPayload = new Map<String, dynamic>();
                                      phoneVerifyPayload["phoneVerificationCode"] =
                                      "11111";
                                      phoneVerifyPayload["phone"] =
                                          mobileNumberController.text.toString();

                                      bool verifyPhnStatus =
                                      await AppSettings.verifyPhn(phoneVerifyPayload);
                                      if (verifyPhnStatus) {
                                        Navigator.of(context, rootNavigator: true).pop();
                                        AppSettings.longSuccessToast(
                                            "User SignUp Successfully");
                                        //showUserSignUSuccessDialog();
                                         await Navigator.push(
                                          context,
                                          MaterialPageRoute(
                                              builder: (context) => const Login()),
                                        );
                                      } else {
                                        Navigator.of(context, rootNavigator: true).pop();
                                        AppSettings.longFailedToast(
                                            "Phone verification failed");
                                      }
                                    }
                                    else {
                                      Navigator.of(context, rootNavigator: true).pop();
                                      AppSettings.longFailedToast(
                                          "Mobile number already exists");
                                    }
                                  } catch (exception) {
                                    print(exception);
                                    Navigator.of(context, rootNavigator: true).pop();
                                    AppSettings.longFailedToast(
                                        "Please enter valid details");
                                  }
                                } else {
                                  AppSettings.longFailedToast(
                                      "details should not be empty");
                                }
                              },


                              child: Text('Sign Up'),
                            )),//login button
                        Row(
                          mainAxisAlignment: MainAxisAlignment.center,
                          children: <Widget>[
                            const Text(
                              'Are you a Member?',
                              style: TextStyle(
                                color: Colors.white,
                              ),
                            ),
                            TextButton(
                              child: const Text(
                                'Login?',
                                style: TextStyle(
                                  fontSize: 20,
                                  color: Colors.white,
                                  decoration: TextDecoration.underline,
                                ),
                              ),
                              onPressed: () {
                                Navigator.push(
                                  context,
                                  MaterialPageRoute(
                                      builder: (context) => const Login()),
                                );
                              },
                            )
                          ],
                        ),
                      ],
                    ),
                  )),
            ),
          ])), );
  }


  /*showUserSignUSuccessDialog() async {

    custmerid.text=AppSettings.customerIdsign;

    return showDialog(
      context: context,
      barrierDismissible: false,
      useSafeArea: true,
      builder: (BuildContext context) {
        return StatefulBuilder(
            builder: (BuildContext context, StateSetter setState) {
              return AlertDialog(
                title: const Text('User SignUp Successfully!!'),
                content: SingleChildScrollView(
                  child: ListBody(
                    children: <Widget>[
                      Container(
                        padding: const EdgeInsets.fromLTRB(10, 10, 10, 0),
                        child: TextFormField(
                          cursorColor: greyColor,
                          readOnly: true,
                          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: 'User Name',
                            labelStyle: TextStyle(
                              color: greyColor, //<-- SEE HERE
                            ),
                          ),
                        ),
                      ),


                      Container(
                        padding: const EdgeInsets.fromLTRB(10, 10, 10, 0),
                        child: TextFormField(
                          cursorColor: greyColor,
                          readOnly: true,
                          controller:custmerid,
                          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: 'User Id',
                            labelStyle: TextStyle(
                              color: greyColor, //<-- SEE HERE
                            ),
                          ),
                        ),
                      ),

                      // AppSettings.saveAvailableReportAndLocationsInMemorysignup('customerId');
                      const SizedBox(
                        height:10,
                      ),
                      Container(
                        padding: const EdgeInsets.fromLTRB(10, 10, 10, 0),
                        child: TextFormField(
                          cursorColor: greyColor,
                          readOnly: true,
                          controller: buildingNameController,
                          decoration: const InputDecoration(
                            prefixIcon: Icon(
                              Icons.home_filled,
                              color: greyColor,
                            ),
                            border: OutlineInputBorder(
                                borderSide: BorderSide(color: greyColor)),
                            focusedBorder: OutlineInputBorder(
                              borderSide: BorderSide(color: greyColor),
                            ),
                            enabledBorder: OutlineInputBorder(
                              borderSide: BorderSide(color: greyColor),
                            ),
                            labelText: 'Building Name',
                            labelStyle: TextStyle(
                              color: greyColor, //<-- SEE HERE
                            ),
                          ),
                        ),
                      ),
                      const SizedBox(
                        height:10,
                      ),
                      Container(
                        padding: const EdgeInsets.fromLTRB(10, 10, 10, 0),
                        child: TextFormField(
                          cursorColor: greyColor,
                          readOnly: true,
                          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: 'Email',
                            labelStyle: TextStyle(
                              color: greyColor, //<-- SEE HERE
                            ),
                          ),
                        ),
                      ),
                    ],
                  ),
                ),
                actions: <Widget>[

                  Container(
                      width: 400,
                      height: 50,
                      padding: const EdgeInsets.fromLTRB(10, 0, 10, 0),
                      child: ElevatedButton(
                        style: ElevatedButton.styleFrom(
                          primary: primaryColor, // background
                          onPrimary: Colors.white, // foreground
                        ),
                        onPressed: () async{
                          await Navigator.push(
                            context,
                            MaterialPageRoute(
                                builder: (context) => const SignIn()),
                          );

                        },
                        child: const Text('OK'),
                      )),


                  *//* Padding(
                  //  padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 16  ),
                    padding: EdgeInsets.only(left:75, bottom: 20, right: 70, top:10),
                    child: TextFormField(
                      cursorColor: greyColor,
                      controller: nameController,
                      decoration: const InputDecoration(
                        border: UnderlineInputBorder(),
                        labelText: 'Enter your username',
                      ),
                    ),
                  ),*//*


                ],
              );
            });
      },
    );
  }*/


}
