import 'package:flutter/material.dart';
import 'package:gap/gap.dart';
import 'package:internet_connection_checker/internet_connection_checker.dart';
import 'package:pharmacy_mobile/auth/auth_service.dart';
import 'package:pharmacy_mobile/widgets/buttonwithprogress_widget.dart';
import 'package:pharmacy_mobile/widgets/glossy_container_widget.dart';
import 'package:pharmacy_mobile/widgets/input_form_widget.dart';
import 'package:pharmacy_mobile/widgets/page_background_widget.dart';
import 'package:pharmacy_mobile/widgets/snackbar_widget.dart';
import 'package:pharmacy_mobile/widgets/text_widget.dart';
import 'package:pharmacy_mobile/widgets/title_widget.dart';
import 'package:go_router/go_router.dart';

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

  @override
  State<RegisterPage> createState() => _RegisterPageState();
}

class _RegisterPageState extends State<RegisterPage> {
  final _authService = AuthService();
  final _emailController = TextEditingController();
  final _passwordController = TextEditingController();
  final _confirmPasswordController = TextEditingController();
  final FocusNode _focusNode = FocusNode();

  late bool _isLoading = false;
  late double containerHeight = 0.44;

  Future<void> _signUp() async {
    final email = _emailController.text;
    final password = _passwordController.text;
    final confirmPassword = _confirmPasswordController.text;

    if (email.isEmpty) {
      if (mounted) {
        showNotification(context, 'Error: Please enter a valid email', false);
      }
      return;
    }

    if (password.isEmpty) {
      if (mounted) {
        showNotification(context, 'Error: Please enter a password', false);
      }
      return;
    }

    if (confirmPassword.isEmpty) {
      if (mounted) {
        showNotification(context, 'Error: Please confirm password', false);
      }
      return;
    }

    if (password != confirmPassword) {
      showNotification(context, 'Password does not match!', false);
      return;
    }

    setState(() {
      _isLoading = true;
      containerHeight = 0.456;
    });

    try {
      if (await InternetConnectionChecker.instance.hasConnection) {
        await _authService.signUp(email, password);

        if (mounted) {
          showNotification(context, 'Registration Successful', true);

          WidgetsBinding.instance.addPostFrameCallback((_) {
            if (mounted) {
              context.push('/login');
            }
          });
        }
      } else {
        if (mounted) {
          showNotification(context, 'Error: No Internet Connection', false);
        }
      }
    } catch (e) {
      if (mounted) {
        showNotification(context, 'Error: $e', false);
      }
    } finally {
      setState(() {
        _isLoading = false;
        containerHeight = 0.44;
      });
    }
  }

  @override
  void dispose() {
    _emailController.dispose();
    _passwordController.dispose();
    _confirmPasswordController.dispose();
    _focusNode.dispose();
    _isLoading = false;
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: PageBackgroundWidget(
            page: 'register',
            child: Center(
                child: Column(mainAxisAlignment: MainAxisAlignment.start, children: [
              const Gap(96),
              const TitleWidget(
                firstTextSize: 14,
                secondTextSize: 24,
                logoSize: 90,
              ),
              const Gap(32),
              const TextWidget(
                text: 'Register',
                title: true,
              ),
              const Gap(16),
              Padding(
                padding: const EdgeInsets.only(left: 32, right: 32),
                child: GlossyContainerWidget(
                  // height: containerHeight,
                  child: Form(
                      child: Column(
                    children: [
                      InputFormWidget(label: 'Email', controller: _emailController),
                      const Gap(16),
                      InputFormWidget(
                        label: 'Password',
                        controller: _passwordController,
                        password: true,
                        validator: (value) {
                          if (value == null || value.isEmpty) {
                            showNotification(context, 'Error: Please enter a password', false);
                          }
                          return null;
                        },
                      ),
                      const Gap(16),
                      InputFormWidget(
                        label: 'Confirm Password',
                        controller: _confirmPasswordController,
                        password: true,
                        onSubmitted: (String? password) {
                          _signUp();
                        },
                      ),
                      const Gap(40),
                      ButtonWithProgressWidget(
                          trigger: _isLoading, progressText: 'Registering', buttonText: 'Register', onPressed: _signUp)
                    ],
                  )),
                ),
              ),
              const Gap(16),
              Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  const TextWidget(
                    text: "Already have an account?",
                    size: 14,
                  ),
                  const Gap(8),
                  GestureDetector(
                    onTap: () => {context.push('/login')},
                    child: const TextWidget(
                      text: 'Login here',
                      size: 14,
                      underlined: true,
                    ),
                  )
                ],
              )
            ]))));
  }
}
