import 'dart:developer';

import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

import '../../../../application/auth/check_phone_form/check_phone_form_bloc.dart';
import '../../../../common/function/app_function.dart';
import '../../../../common/theme/theme.dart';
import '../../../../domain/auth/auth.dart';
import '../../../../injection.dart';
import '../../../components/button/button.dart';
import '../../../components/toast/flushbar.dart';
import '../../../router/app_router.gr.dart';
import 'widgets/phone_field.dart';

@RoutePage()
class LoginPage extends StatelessWidget implements AutoRouteWrapper {
  const LoginPage({super.key});

  @override
  Widget build(BuildContext context) {
    return BlocListener<CheckPhoneFormBloc, CheckPhoneFormState>(
      listenWhen: (p, c) =>
          p.failureOrCheckPhoneOption != c.failureOrCheckPhoneOption,
      listener: (context, state) {
        state.failureOrCheckPhoneOption.fold(
          () => null,
          (either) => either.fold(
            (f) => AppFlushbar.showAuthFailureToast(context, f),
            (data) {
              AppFlushbar.showSuccess(context, data.message);
              Future.delayed(Duration(milliseconds: 1000), () {
                log(data.toString());
                if (data.status.isNotRegistered) {
                  context.router.push(
                    RegisterRoute(phoneNumber: data.phoneNumber),
                  );
                } else if (data.status.isPasswordRequired) {
                  context.router.push(
                    PasswordRoute(
                      phoneNumber: getNormalizePhone(state.phoneNumber),
                    ),
                  );
                }
              });
            },
          ),
        );
      },
      child: Scaffold(
        appBar: AppBar(title: const Text('Masuk')),
        body: BlocBuilder<CheckPhoneFormBloc, CheckPhoneFormState>(
          builder: (context, state) {
            return Padding(
              padding: const EdgeInsets.symmetric(horizontal: 24.0),
              child: Form(
                autovalidateMode: state.showErrorMessages
                    ? AutovalidateMode.always
                    : AutovalidateMode.disabled,
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    const SizedBox(height: 40),

                    // Title
                    LoginPhoneField(),

                    const SizedBox(height: 50),

                    // Continue Button
                    AppElevatedButton(
                      onPressed: state.isSubmitting
                          ? null
                          : () {
                              context.read<CheckPhoneFormBloc>().add(
                                CheckPhoneFormEvent.submitted(),
                              );
                            },
                      isLoading: state.isSubmitting,
                      title: 'Lanjutkan',
                    ),

                    const SizedBox(height: 24),

                    // Terms and Conditions
                    Center(
                      child: RichText(
                        textAlign: TextAlign.center,
                        text: TextSpan(
                          style: AppStyle.md.copyWith(
                            color: AppColor.textSecondary,
                            height: 1.4,
                          ),
                          children: [
                            const TextSpan(
                              text:
                                  'Dengan masuk Enaklo, kamu telah\nmenyetujui ',
                            ),
                            TextSpan(
                              text: 'Syarat & Ketentuan',
                              style: AppStyle.md.copyWith(
                                color: AppColor.primary,
                                fontWeight: FontWeight.w600,
                              ),
                            ),
                            const TextSpan(text: ' dan\n'),
                            TextSpan(
                              text: 'Kebijakan Privasi',
                              style: AppStyle.md.copyWith(
                                color: AppColor.primary,
                                fontWeight: FontWeight.w600,
                              ),
                            ),
                          ],
                        ),
                      ),
                    ),

                    const SizedBox(height: 40),
                  ],
                ),
              ),
            );
          },
        ),
      ),
    );
  }

  @override
  Widget wrappedRoute(BuildContext context) => BlocProvider(
    create: (context) => getIt<CheckPhoneFormBloc>(),
    child: this,
  );
}
