import 'package:enaklo_pos/core/components/buttons.dart';
import 'package:enaklo_pos/core/components/dashed_divider.dart';
import 'package:enaklo_pos/core/components/spaces.dart';
import 'package:enaklo_pos/core/constants/colors.dart';
import 'package:enaklo_pos/core/extensions/build_context_ext.dart';
import 'package:enaklo_pos/core/extensions/date_time_ext.dart';
import 'package:enaklo_pos/core/extensions/string_ext.dart';
import 'package:enaklo_pos/core/function/app_function.dart';
import 'package:enaklo_pos/data/models/response/payment_response_model.dart';
import 'package:enaklo_pos/presentation/home/models/product_quantity.dart';
import 'package:enaklo_pos/presentation/home/pages/dashboard_page.dart';
import 'package:enaklo_pos/presentation/sales/blocs/order_loader/order_loader_bloc.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

class SuccessPaymentPage extends StatefulWidget {
  final List<ProductQuantity> productQuantity;
  final PaymentData payment;
  const SuccessPaymentPage(
      {super.key, required this.payment, required this.productQuantity});

  @override
  State<SuccessPaymentPage> createState() => _SuccessPaymentPageState();
}

class _SuccessPaymentPageState extends State<SuccessPaymentPage> {
  @override
  void initState() {
    super.initState();
    context
        .read<OrderLoaderBloc>()
        .add(OrderLoaderEvent.getById(widget.payment.orderId ?? ""));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: AppColors.background,
      body: Center(
        child: Container(
          width: context.deviceWidth * 0.4,
          height: context.deviceHeight * 0.8,
          decoration: BoxDecoration(
            color: AppColors.white,
            borderRadius: const BorderRadius.all(Radius.circular(12.0)),
          ),
          child: BlocBuilder<OrderLoaderBloc, OrderLoaderState>(
            builder: (context, state) {
              return state.maybeWhen(
                orElse: () => Center(
                  child: CircularProgressIndicator(),
                ),
                loading: () => Center(
                  child: CircularProgressIndicator(),
                ),
                error: (message) => Center(
                  child: Text(message),
                ),
                loadedDetail: (order) => Column(
                  children: [
                    Padding(
                      padding: const EdgeInsets.all(16.0),
                      child: Column(
                        children: [
                          Text(
                            'Pembayaran!',
                            style: const TextStyle(
                                fontSize: 18, fontWeight: FontWeight.bold),
                          ),
                          Text('Pembayaran berhasil dilalukan',
                              style: const TextStyle(fontSize: 14)),
                        ],
                      ),
                    ),
                    DashedDivider(
                      color: AppColors.grey,
                    ),
                    SpaceHeight(24),
                    Padding(
                      padding: const EdgeInsets.symmetric(horizontal: 16.0),
                      child: Icon(
                        Icons.check_circle_outline,
                        size: 64,
                        color: Colors.green,
                      ),
                    ),
                    Spacer(),
                    Padding(
                      padding: const EdgeInsets.all(16.0).copyWith(top: 24),
                      child: Column(
                        children: [
                          Row(
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            children: [
                              Text(
                                'No. Pesanan',
                              ),
                              Text(
                                order.orderNumber ?? "-",
                                style: const TextStyle(
                                    fontWeight: FontWeight.bold),
                              ),
                            ],
                          ),
                          SpaceHeight(4),
                          Row(
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            children: [
                              Text(
                                'Waktu',
                              ),
                              Text(
                                (widget.payment.createdAt ?? DateTime.now())
                                    .toFormattedDate3(),
                                style: const TextStyle(
                                    fontWeight: FontWeight.bold),
                              ),
                            ],
                          ),
                        ],
                      ),
                    ),
                    DashedDivider(
                      color: AppColors.grey,
                    ),
                    Padding(
                      padding: const EdgeInsets.all(16.0),
                      child: Row(
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                        children: [
                          Text(
                            'Status Pembayaran',
                          ),
                          Text(
                            'Lunas',
                            style: const TextStyle(
                                fontWeight: FontWeight.bold,
                                color: Colors.green),
                          ),
                        ],
                      ),
                    ),
                    DashedDivider(
                      color: AppColors.grey,
                    ),
                    Padding(
                      padding: const EdgeInsets.all(16.0),
                      child: Row(
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                        children: [
                          Text(
                            'Total Pembayaran',
                          ),
                          Text(
                            (widget.payment.amount ?? 0)
                                .toString()
                                .currencyFormatRpV2,
                            style: const TextStyle(fontWeight: FontWeight.bold),
                          ),
                        ],
                      ),
                    ),
                    DashedDivider(
                      color: AppColors.grey,
                    ),
                    Spacer(),
                    Padding(
                      padding: const EdgeInsets.all(16.0),
                      child: Row(
                        children: [
                          Expanded(
                            child: Button.outlined(
                              onPressed: () =>
                                  context.pushReplacement(DashboardPage()),
                              label: 'Kembali',
                              height: 44,
                            ),
                          ),
                          SpaceWidth(12),
                          Expanded(
                            child: Button.filled(
                              onPressed: () async {
                                onPrint(
                                  context,
                                  productQuantity: widget.productQuantity,
                                  order: order,
                                );
                              },
                              label: 'Cetak',
                              icon: Icon(
                                Icons.print,
                                color: AppColors.white,
                              ),
                              height: 44,
                            ),
                          ),
                        ],
                      ),
                    ),
                  ],
                ),
              );
            },
          ),
        ),
      ),
    );
  }
}
