import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_progress_hud/flutter_progress_hud.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:intl/intl.dart';
import 'package:unit2/model/passo/class_components%20_offline.dart';
import 'package:unit2/screens/offline/passo/building/edit/AddExtraItemsEdit.dart';

import '../../../../../bloc/offline/offline_passo/building/additional_items_offline/additional_items_offline_bloc.dart';
import '../../../../../model/passo/additional_items.dart';
import '../../../../../model/passo/class_components.dart';
import '../../../../../model/passo/unit_construct.dart';
import '../../../../../utils/alerts.dart';
import '../../../../../widgets/passo/custom_button.dart';

class AdditionalItemEditPageOffline extends StatefulWidget {
  final List<UnitConstruct> unit;
  final List<ClassComponentsOffline> options;
  final int tempId;
  final VoidCallback NextBtn;
  final VoidCallback PrevBtn;

  AdditionalItemEditPageOffline(
      this.unit, this.options, this.tempId, this.NextBtn, this.PrevBtn);

  @override
  _AdditionalItemEditPageOffline createState() =>
      _AdditionalItemEditPageOffline();
}

class _AdditionalItemEditPageOffline
    extends State<AdditionalItemEditPageOffline> {
  void deleteItem(int itemId) {
    context
        .read<AdditionalItemsOfflineBloc>()
        .add(DeleteAdditionalItems(id: itemId));
  }

  // double _totalMarketValue(items) {
  //   double total = 0;
  //   items.forEach((row) {
  //     total += double.parse(row.adjustedMarketVal);
  //   });
  //   return total;
  // }

  double _totalMarketValue(items) {
    double total = 0;
    items.forEach((row) {
      total += double.parse(row.adjustedMarketVal);
    });
    return total;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ProgressHUD(
        padding: const EdgeInsets.all(24),
        backgroundColor: Colors.black87,
        indicatorWidget: const SpinKitFadingCircle(color: Colors.white),
        child: BlocConsumer<AdditionalItemsOfflineBloc,
            AdditionalItemsOfflineState>(
          listener: (context, state) {},
          builder: (context, state) {
            final state = context.watch<AdditionalItemsOfflineBloc>().state;
            if (state is AdditionalItemsLoaded) {
              return Column(
                children: [
                  Expanded(
                    child: SingleChildScrollView(
                      child: Padding(
                        padding: const EdgeInsets.all(15.0),
                        child: Column(
                          children: [
                            Container(
                              margin: const EdgeInsets.only(
                                  left: 0, top: 20, right: 0, bottom: 10),
                              child: const Text('ADDITIONAL ITEMS',
                                  style: TextStyle(
                                      fontWeight: FontWeight.bold,
                                      fontSize: 18),
                                  textAlign: TextAlign.left),
                            ),
                            Align(
                              alignment: Alignment.topRight,
                              child: ElevatedButton(
                                style: ElevatedButton.styleFrom(
                                  backgroundColor: Colors.red,
                                ),
                                onPressed: () {
                                  context
                                      .read<AdditionalItemsOfflineBloc>()
                                      .add(ShowAdditionalItems());
                                },
                                child: const Row(
                                  mainAxisSize: MainAxisSize.min,
                                  children: [
                                    Text('ADD ITEM'), // <-- Text
                                    SizedBox(
                                      width: 5,
                                    ),
                                    Icon(
                                      // <-- Icon
                                      Icons.add,
                                      size: 24.0,
                                    ),
                                  ],
                                ),
                              ),
                            ),
                            SingleChildScrollView(
                              scrollDirection: Axis.horizontal,
                              child: DataTable(
                                // ignore: prefer_const_literals_to_create_immutables
                                columns: [
                                  const DataColumn(
                                    label: Text('Items'),
                                  ),
                                  const DataColumn(
                                    label: Text('Unit Value'),
                                  ),
                                  const DataColumn(
                                    label: Text('% of BUCC'),
                                  ),
                                  const DataColumn(
                                    label: Text('Market Value'),
                                  ),
                                  const DataColumn(
                                    label: Text('Action'),
                                  )
                                ],
                                rows: state.addItem.map((dataRow) {
                                  return DataRow(
                                    cells: [
                                      DataCell(Text(dataRow.className)),
                                      DataCell(Text(NumberFormat.currency(
                                        locale: 'en-PH',
                                        symbol: "₱",
                                      ).format(double.parse(
                                          dataRow.baseUnitValue)))),
                                      DataCell(
                                          Text(dataRow.unitValue.toString())),
                                      DataCell(Text(NumberFormat.currency(
                                        locale: 'en-PH',
                                        symbol: "₱",
                                      ).format(double.parse(
                                          dataRow.adjustedMarketVal)))),
                                      DataCell(Row(
                                        children: [
                                          InkWell(
                                            child: Container(
                                              height: 30,
                                              width: 30,
                                              decoration: const BoxDecoration(
                                                shape: BoxShape.circle,
                                                color: Colors.red,
                                              ),
                                              child: const Icon(
                                                Icons.delete,
                                                color: Colors.white,
                                                size: 20.0,
                                              ),
                                            ),
                                            onTap: () {
                                              confirmAlertWithCancel(
                                                  context,
                                                  () => deleteItem(dataRow.id!),
                                                  () => null,
                                                  'Delete Item?',
                                                  "Are you sure you want to delete this item?");
                                            },
                                          ),
                                          const SizedBox(
                                            width: 10,
                                          ),
                                          InkWell(
                                            child: Container(
                                              height: 30,
                                              width: 30,
                                              decoration: const BoxDecoration(
                                                shape: BoxShape.circle,
                                                color: Colors.red,
                                              ),
                                              child: const Icon(
                                                Icons.edit,
                                                color: Colors.white,
                                                size: 20.0,
                                              ),
                                            ),
                                            onTap: () {},
                                          ),
                                        ],
                                      ))
                                    ],
                                  );
                                }).toList(),
                              ),
                            ),
                          ],
                        ),
                      ),
                    ),
                  ),
                  Padding(
                    padding: const EdgeInsets.only(left: 20.0, right: 20.0),
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        const Text(
                          'Total Market Value',
                          style: TextStyle(
                              fontWeight: FontWeight.bold, fontSize: 17),
                        ),
                        Text(
                          NumberFormat.currency(locale: 'en-PH', symbol: "₱")
                              .format(_totalMarketValue(state.addItem)),
                          style: TextStyle(
                              fontWeight: FontWeight.bold, fontSize: 17),
                        )
                      ],
                    ),
                  ),
                  Padding(
                    padding: const EdgeInsets.all(15.0),
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                      children: [
                        CustomButton(
                          icon: const Icon(Icons.chevron_left_rounded,
                              color: Colors.white),
                          onPressed: () {
                            {
                              widget.PrevBtn();
                            }
                          },
                        ),
                        CustomButton(
                          icon: const Icon(Icons.chevron_right_rounded,
                              color: Colors.white),
                          onPressed: () {
                            {
                              widget.NextBtn();
                            }
                          },
                        )
                      ],
                    ),
                  ),
                ],
              );
            }
            if (state is AdditionalItemsDeletedState) {
              if (state.success) {
                WidgetsBinding.instance.addPostFrameCallback((_) {
                  successAlert(context, "Deletion Successful",
                      "Extra item has been deleted successfully", () {
                    Navigator.of(context).pop();
                    context.read<AdditionalItemsOfflineBloc>().add(
                        LoadAdditionalItemsEdit(
                            items: const <AdditionalItems>[],
                            id: widget.tempId));
                  });
                });
              }
            }
            if (state is ShowAddItemsScreen) {
              return ConstrainedBox(
                constraints: const BoxConstraints(maxHeight: 1000.0),
                child: AlertDialog(
                  insetPadding: const EdgeInsets.symmetric(
                    horizontal: 20.0,
                    vertical: 10.0,
                  ),
                  title: const Text(
                    'ADD EXTRA ITEMS',
                    textAlign: TextAlign.center,
                  ),
                  content: Column(
                    mainAxisSize: MainAxisSize.min,
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Expanded(
                          child: AddExtraItemsEditOffline(
                              widget.unit, widget.options, widget.tempId))
                    ],
                  ),
                ),
              );
            }
            return Container(
              child: Column(
                children: [
                  Container(
                    margin: const EdgeInsets.only(
                        left: 0, top: 20, right: 0, bottom: 10),
                    child: const Text('ADDITIONAL MATERIALS',
                        style: TextStyle(
                            fontWeight: FontWeight.bold, fontSize: 18),
                        textAlign: TextAlign.left),
                  ),
                  Align(
                    alignment: Alignment.topRight,
                    child: ElevatedButton(
                      onPressed: () {
                        context
                            .read<AdditionalItemsOfflineBloc>()
                            .add(ShowAdditionalItems());
                      },
                      child: const Row(
                        mainAxisSize: MainAxisSize.min,
                        children: [
                          Text('ADD ITEM'), // <-- Text
                          SizedBox(
                            width: 5,
                          ),
                          Icon(
                            // <-- Icon
                            Icons.add,
                            size: 24.0,
                          ),
                        ],
                      ),
                    ),
                  ),
                ],
              ),
            );
          },
        ),
      ),
    );
  }
}
