
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:supplier_new/common/dashboard.dart';
import 'package:supplier_new/common/settings.dart';
import 'package:firebase_messaging/firebase_messaging.dart';

import '../signup/signup_mobilenumber_screen.dart';

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

  @override
  State<Login> createState() => _LoginState();
}

class _LoginState extends State<Login> {

  final storage = FlutterSecureStorage(
    aOptions: AndroidOptions(
      resetOnError: true,
      encryptedSharedPreferences: true,
    ),
  );

  bool isObscureText=true;
  TextEditingController mobileNumberController = TextEditingController();
  TextEditingController passwordController = TextEditingController();
  final _formKey = GlobalKey<FormState>();

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

  @override
  Widget build(BuildContext context) {

    return Scaffold(
        backgroundColor: Colors.white,
        body: Stack(
          children: <Widget>[
            /*Container(
                decoration:  const BoxDecoration(
                  image:  DecorationImage(image:  AssetImage("images/backgroundimage.png"), fit: BoxFit.cover,),
                ),
              ),*/
            GestureDetector(
              onTap: () {
                FocusManager.instance.primaryFocus?.unfocus();
              },
              child: SafeArea(
                child: SingleChildScrollView(
                    child: Padding(
                        padding: const EdgeInsets.fromLTRB(24, 0, 24, 0),
                        child: Form(
                          key: _formKey,
                          child: Column(

                            children: <Widget>[
                              SizedBox(height: MediaQuery.of(context).size.height * .2),
                              CircleAvatar(radius: 80, backgroundColor: Color(0XFFF3F1FB)),
                              SizedBox(height: MediaQuery.of(context).size.height * .05),

                              SizedBox(height:MediaQuery.of(context).size.height * .024,),
                              TextFormField(
                                controller: mobileNumberController,
                                keyboardType: TextInputType.number,
                                maxLength: 10,
                                autovalidateMode: AutovalidateMode.onUserInteraction,

                                decoration: textFormFieldDecoration(Icons.phone,'Mobile Number'),

                                style: fontTextStyle(14, Color(0XFF2A2A2A), FontWeight.w400),
                                cursorColor: Color(0XFF8270DB),

                                inputFormatters: [

                                  // Allow only numbers
                                  FilteringTextInputFormatter.digitsOnly,

                                  // Restrict first digit 6-9
                                  TextInputFormatter.withFunction(
                                        (oldValue, newValue) {

                                      if (newValue.text.isEmpty) {
                                        return newValue;
                                      }

                                      // First digit must be 6-9
                                      if (!RegExp(r'^[6-9]').hasMatch(newValue.text)) {
                                        return oldValue;
                                      }

                                      return newValue;
                                    },
                                  ),
                                ],

                                validator: (value) {

                                  if (value == null || value.isEmpty) {
                                    return "Please enter mobile number";
                                  }

                                  if (!RegExp(r'^[6-9]').hasMatch(value)) {
                                    return "Please enter digits 6,7,8,9";
                                  }

                                  if (value.length != 10) {
                                    return "Enter valid 10 digit number";
                                  }

                                  return null;
                                },
                              ),
                              SizedBox(height:MediaQuery.of(context).size.height * .016,),

                              Container(
                                child: TextFormField(
                                  cursorColor:Color(0XFF8270DB),
                                  obscureText: isObscureText,
                                  obscuringCharacter: '*',
                                  controller: passwordController,
                                  decoration: InputDecoration(
                                    filled: false,
                                    fillColor: Colors.white,
                                    labelText: 'Password',
                                    //prefixIcon: const Icon(Icons.lock, color: Colors.white,),
                                    labelStyle: fontTextStyle(14,Color(0XFF7E7F80),FontWeight.w400),
                                    border: OutlineInputBorder(
                                        borderRadius: BorderRadius.circular(4.0),
                                        borderSide: BorderSide(color: greyColor,
                                          width: 1,    )),
                                    focusedBorder: OutlineInputBorder(
                                      borderRadius: BorderRadius.circular(4.0),
                                      borderSide: BorderSide(color: Color(0XFF8270DB),width: 2,),
                                    ),
                                    enabledBorder: OutlineInputBorder(
                                      borderRadius: BorderRadius.circular(4.0),
                                      borderSide: BorderSide(color: greyColor),
                                    ),

                                    suffixIcon: IconButton(
                                      icon:  isObscureText==true?Image.asset('images/eye_icon.png',color: Color(0XFF7E7F80),width: 30,height: 30,):Image.asset('images/open_eye.png',color:Color(0XFF7E7F80),width: 30,height: 30,),
                                      /* Icon(
                                        icon:Image.asset('assets/your_image.png'),
                                        color: isObscureText==true?greyColor:primaryColor,
                                      ),*/
                                      onPressed: () {

                                        print("show password");
                                        setState(() {
                                          isObscureText = !isObscureText;
                                        });
                                      },
                                    ),

                                  ),
                                  style:  fontTextStyle(14,Color(0XFF2A2A2A),FontWeight.w400),
                                  validator: (value) {
                                    if (value == null || value.isEmpty) {
                                      return "Please enter password";
                                    }
                                    return null;
                                  },
                                ),
                              ),

                             /* SizedBox(height:MediaQuery.of(context).size.height * .016,),
                              Align(
                                  alignment: Alignment.bottomLeft,
                                  child:GestureDetector(
                                    onTap: (){
                                      *//* Navigator.push(
                                        context,
                                        MaterialPageRoute(builder: (context) => ForgotpasswordNew()),
                                      );*//*
                                    },
                                    child: Text(
                                      'Forgot Password?',
                                      style:  fontTextStyle(12,Color(0XFF1D7AFC),FontWeight.w600),

                                    ),
                                  )
                              ),*/
                              SizedBox(height:MediaQuery.of(context).size.height * .024,),
                              Container(
                                  width:double.infinity,
                                  height: MediaQuery.of(context).size.height * .06,
                                  child: ElevatedButton(
                                    style: ElevatedButton.styleFrom(
                                      foregroundColor: Colors.white,
                                      backgroundColor: primaryColor,
                                      shape: RoundedRectangleBorder(
                                        borderRadius: BorderRadius.circular(12.0), // Customize the radius
                                      ),
                                    ),
                                    onPressed: () async {

                                      // 🔥 THIS MAKES VALIDATION WORK
                                      if (!_formKey.currentState!.validate()) {
                                        return;
                                      }

                                      AppSettings.preLoaderDialog(context);

                                      bool isOnline = await AppSettings.internetConnectivity();

                                      if(isOnline){

                                        SharedPreferences prefs =
                                        await SharedPreferences.getInstance();

                                        String? fcmToken = prefs.getString('fcmToken');

                                        var payload = {
                                          "phone": mobileNumberController.text.trim(),
                                          "password": passwordController.text.trim(),
                                          "fcmIds": [fcmToken]
                                        };

                                        bool signinStatus =
                                        await AppSettings.login(payload);

                                        Navigator.of(context,rootNavigator: true).pop();

                                        if (signinStatus) {

                                          String token = AppSettings.accessToken;

                                          await storage.write(
                                              key: 'authToken',
                                              value: token);

                                          Navigator.push(
                                            context,
                                            MaterialPageRoute(
                                                builder: (context) =>
                                                const DashboardScreen()),
                                          );

                                          AppSettings.longSuccessToast(
                                              "Logged in Successfully");

                                          mobileNumberController.clear();
                                          passwordController.clear();

                                        } else {

                                          AppSettings.longFailedToast(
                                              "Invalid details");

                                        }

                                      }
                                      else{

                                        Navigator.of(context,
                                            rootNavigator: true).pop();

                                        AppSettings.longFailedToast(
                                            "Please Check internet");

                                      }

                                    },
                                    child:  Text('Login',style: fontTextStyle(12,Colors.white,FontWeight.w600),),
                                  )),
                              SizedBox(height:MediaQuery.of(context).size.height * .024,),
                              Align(
                                  alignment: Alignment.center,
                                  child:GestureDetector(
                                    onTap: (){
                                       Navigator.push(
                                        context,
                                        MaterialPageRoute(builder: (context) => SignUpMobileNumberScreen()),
                                      );
                                    },
                                    child: Text(
                                      'Not a member yet! SignUp',
                                      style:  fontTextStyle(12,Color(0XFF1D7AFC),FontWeight.w600),

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