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

import '../../../../../application/order/order_loader/order_loader_bloc.dart';
import '../../../../../application/printer/print_struck/print_struck_bloc.dart';
import '../../../../../common/theme/theme.dart';
import '../../../../../injection.dart';
import '../../../../components/error/order_loader_error_state_widget.dart';
import '../../../../components/loader/loader_with_text.dart';
import '../../../../components/toast/flushbar.dart';
import 'widgets/payment_success_left_panel.dart';
import 'widgets/payment_success_right_panel.dart';

@RoutePage()
class PaymentSuccessPage extends StatelessWidget implements AutoRouteWrapper {
  final String orderId;
  const PaymentSuccessPage({super.key, required this.orderId});

  @override
  Widget build(BuildContext context) {
    return BlocListener<PrintStruckBloc, PrintStruckState>(
      listenWhen: (previous, current) =>
          previous.failureOrPrintStruck != current.failureOrPrintStruck,
      listener: (context, state) {
        state.failureOrPrintStruck.fold(() {}, (either) {
          either.fold((f) => AppFlushbar.showPrinterFailureToast(context, f), (
            success,
          ) {
            AppFlushbar.showSuccess(context, "Struck berhasil dicetak");
          });
        });
      },
      child: Scaffold(
        backgroundColor: AppColor.background,
        body: SafeArea(
          child: BlocBuilder<OrderLoaderBloc, OrderLoaderState>(
            builder: (context, state) {
              if (state.isFetchingById) {
                return const Center(child: LoaderWithText());
              }
              return state.failureOptionGetById.fold(
                () => Container(
                  padding: const EdgeInsets.all(24.0),
                  child: Row(
                    children: [
                      // Left Panel - Success Message & Order Info
                      Expanded(
                        flex: 35,
                        child: PaymentSuccessLeftPanel(order: state.order),
                      ),

                      const SizedBox(width: 16),

                      // Right Panel - Order Details
                      Expanded(
                        flex: 65,
                        child: PaymentSuccessRightPanel(order: state.order),
                      ),
                    ],
                  ),
                ),
                (f) => OrderLoaderErrorStateWidget(
                  failure: f,
                  onRefresh: () {
                    context.read<OrderLoaderBloc>().add(
                      OrderLoaderEvent.getById(orderId),
                    );
                  },
                ),
              );
            },
          ),
        ),
      ),
    );
  }

  @override
  Widget wrappedRoute(BuildContext context) => BlocProvider(
    create: (context) =>
        getIt<OrderLoaderBloc>()..add(OrderLoaderEvent.getById(orderId)),
    child: this,
  );
}
