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 '../../../../../domain/order/order.dart';
import '../../../../../injection.dart';
import '../../../../components/loader/loader_with_text.dart';
import '../../../../components/spaces/space.dart';
import '../../../../components/toast/flushbar.dart';
import 'widgets/success_order_left_panel.dart';
import 'widgets/success_order_right_panel.dart';

@RoutePage()
class SuccessOrderPage extends StatelessWidget implements AutoRouteWrapper {
  final Order order;
  const SuccessOrderPage({super.key, required this.order});

  @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 Padding(
                padding: const EdgeInsets.all(24.0),
                child: Row(
                  children: [
                    Expanded(
                      flex: 35,
                      child: SuccessOrderLeftPanel(order: state.order),
                    ),
                    const SpaceWidth(16),
                    Expanded(
                      flex: 65,
                      child: SuccessOrderRightPanel(order: state.order),
                    ),
                  ],
                ),
              );
            },
          ),
        ),
      ),
    );
  }

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