import 'package:connectycube_sdk/connectycube_chat.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:vmeeting/blocs/user_sign_up_bloc/user_sign_up_bloc.dart';
import 'package:vmeeting/src/controllers/enter_number_cont.dart';
import 'package:vmeeting/src/extension/context_extensions.dart';
import 'package:vmeeting/src/utils/app_utils.dart';
import 'package:vmeeting/src/widgets/small_text.dart';

import '../../app_models/user_model/user_model.dart';
import '../../service/routes/routes_name.dart';
import '../../src/constants/colors_const.dart';
import '../../src/utils/show_dialogs.dart';
import '../../src/widgets/big_text_widget.dart';
import '../../src/widgets/custom_loading/customloading.dart';
import '../../src/widgets/exceptions/app_exeptions.dart';
import '../../src/widgets/textfiled_widgets/auth_text_fild.dart';

class UserSignUpPage extends StatefulWidget {
  final NumberController controller;
  const UserSignUpPage({super.key, required this.controller});

  @override
  State<UserSignUpPage> createState() => _UserSignUpPageState();
}

class _UserSignUpPageState extends State<UserSignUpPage> {
  late UserSignUpBloc userSignUpBloc;
  late bool isDarkMode = false;

  final _loginControlle = TextEditingController(text: "Flutter2000");
  final _loginFocusNode = FocusNode();
  final _passwordControlle = TextEditingController(text: "Flutter2000");
  final _passwordFocusNode = FocusNode();
  final _emailControlle = TextEditingController(text: "muxtorovinomjon0227@gmail.com");
  final _emailFocusNode = FocusNode();
  final _fullNameControlle = TextEditingController(text: "Muxtorov Inomjon");
  final _fullNameFocusNode = FocusNode();


  @override
  void initState() {
    userSignUpBloc = BlocProvider.of<UserSignUpBloc>(context);
    userSignUpBloc.add(UserSignUpFetchEvent());
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: BlocConsumer<UserSignUpBloc, UserSignUpState>(
        listener: (context, state) {},
        builder: (context, state) {
          if (state is UserSignUpInitialState) {
            return buildLoading();
          }
          if (state is UserSignUpLoadedState) {
            return buildUI();
          }
          if (state is UserSignUpFetchState) {
            return const Center(
                child: AppExceptionsWidget(
                    message: "Exception",
                    authName: MainRoutes.user_signup_page));
          }
          if (state is UserSignUpExceptionState) {
            return const Center(
                child: AppExceptionsWidget(
                    message: "Exception",
                    authName: MainRoutes.user_signup_page));
          }
          return const Center(child: Text("AloVoice"));
        },
      ),
    );
  }

  Widget buildUI(){
    return Container(
      margin: EdgeInsets.symmetric(horizontal: context.w * 0.06),
      child: SingleChildScrollView(
        child: Column(
          children: [
            SizedBox(height: context.h * 0.06),
            Row(
              mainAxisAlignment: MainAxisAlignment.end,
              children: [
                Switch.adaptive(
                  value:  isDarkMode,
                  activeColor: ColorConst.appGreenColor,
                  onChanged: (value) {
                    isDarkMode = value;
                    widget.controller.inputTheme.add(value);
                  },
                ),
              ],),
            SizedBox(height: context.h * 0.1),
            BigText(
              text: "Sign Up",
              size: context.h * 0.04,
              fontWidget: FontWeight.bold,
            ),
            SizedBox(height: context.h * 0.1),
            AuthTextFild(
              lableName: "Email",
              borderRadius: 10,
              elevation: 1,
              color: Colors.grey.withOpacity(0.2),
              type: TextInputType.emailAddress,
              focusNode: _emailFocusNode,
              textEditingController: _emailControlle,
            ),
            SizedBox(height: context.h * 0.03),
            AuthTextFild(
              lableName: "Login",
              borderRadius: 10,
              elevation: 1,
              color: Colors.grey.withOpacity(0.2),
              focusNode: _loginFocusNode,
              textEditingController: _loginControlle,
            ),
            SizedBox(height: context.h * 0.03),
            AuthTextFild(
              lableName: "Password",
              borderRadius: 10,
              elevation: 1,
              color: Colors.grey.withOpacity(0.2),
              focusNode: _passwordFocusNode,
              textEditingController: _passwordControlle,
            ),
            SizedBox(height: context.h * 0.03),
            AuthTextFild(
              lableName: "FullName",
              borderRadius: 10,
              elevation: 1,
              color: Colors.grey.withOpacity(0.2),
              focusNode: _fullNameFocusNode,
              textEditingController: _fullNameControlle,
            ),
            SizedBox(height: context.h * 0.01),
            Row(
              mainAxisAlignment: MainAxisAlignment.end,
              children: [
              TextButton(onPressed: (){
                Navigator.pushReplacementNamed(context, MainRoutes.sign_in_page);
              }, child: SmallText(text: "Sign In",color: ColorConst.appMainColor,))
            ],),
            SizedBox(height: context.h * 0.08),
            buildButtons(),
          ],
        ),
      )
    );
  }

  Widget buildButtons() {
    return StreamBuilder(stream: widget.controller.outputElevatedButton,
        builder: (BuildContext context, snapshot){
         return Column(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        children: [
          ElevatedButton(
            style: ElevatedButton.styleFrom(
              foregroundColor: Colors.white,
              backgroundColor: ColorConst.appGreenColor,
              disabledForegroundColor: Colors.grey.withOpacity(0.38),
              disabledBackgroundColor: Colors.grey.withOpacity(0.12),
            ),
            onPressed: () async {
              if(_fullNameControlle.text.isNotEmpty && _emailControlle.text.isNotEmpty && _loginControlle.text.isNotEmpty && _passwordControlle.text.isNotEmpty){
                userSigUp();
              }else{
              AppUtils.showSnackBar(context, "PLEASE ENTER THE SAME VALUE AGAIN");
              }

            },
            child: SizedBox(
              width: context.w * 0.8,
              height: context.h * 0.06,
              child:  Center(
                child: snapshot.data ?? false
                    ? AppUtils.buttonLoader
                    :  BigText(
                  text: "Sign Up".toUpperCase(),
                  fontWidget: FontWeight.bold,
                  size: 16,
                ),
              ),
            ),
          ),
        ],
      );
    });
  }

  Future<void> userSigUp() async {
    widget.controller.inputElevatedButton.add(true);
    CubeUser user = CubeUser(
        login: _loginControlle.text,
        password: _passwordControlle.text,
        email: _emailControlle.text,
        fullName: _fullNameControlle.text,);
    userSignUpBloc.add(UserSignUpChakingEvent(controller: widget.controller, context: context, user: user));

  }

  Widget buildLoading() {
    return Center(child: CustomLoading());
  }
}