import 'dart:developer';

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/button_widget.dart';
import 'package:pharmacy_mobile/widgets/input_widget.dart';
import 'package:pharmacy_mobile/widgets/logo_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();

  bool _isLoading = false;

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

    if (email.isEmpty) {
      log('message');
      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);

    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);
    }
  }

  @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: Container(
                    padding: EdgeInsets.fromLTRB(32, 32, 32, 40),
                    decoration: BoxDecoration(
                        color: const Color.fromRGBO(57, 38, 62, 0.6),
                        borderRadius: BorderRadius.all(Radius.circular(16)),
                        boxShadow: [
                          BoxShadow(
                            color: const Color.fromRGBO(0, 0, 0, 0.2), // Subtle shadow to give depth
                            spreadRadius: 0,
                            blurRadius: 4,
                            offset: Offset(0, 2),
                          )
                        ]),
                    child: Form(
                        child: Column(
                      children: [
                        InputWidget(label: 'Email', controller: _emailController),
                        const Gap(16),
                        InputWidget(
                          label: 'Password',
                          controller: _passwordController,
                          password: true,
                        ),
                        const Gap(16),
                        InputWidget(
                          label: 'Confirm Password',
                          controller: _confirmPasswordController,
                          password: true,
                        ),
                        const Gap(40),
                        // TextButton(onPressed: () => {_signIn()}, child: const Text('Login'))
                        if (_isLoading)
                          Center(child: CircularProgressIndicator(color: Colors.white))
                        else
                          ButtonWidget(text: 'Create Account', 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,
                      ),
                    )
                  ],
                )
              ],
            ),
          )),
    );
  }
}
