import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:intl/intl.dart';
import 'package:unit2/bloc/passo/bulding/additional_item/additional_item_bloc.dart';
import 'package:unit2/model/passo/class_components.dart';
import 'package:unit2/model/passo/unit_construct.dart';
import 'package:unit2/screens/passo/Building/add_building_components/AddExtraItems.dart';
import 'package:unit2/utils/alerts.dart';
import 'package:unit2/widgets/passo/custom_button.dart';

class AdditionalItemPage extends StatefulWidget {
  final List<UnitConstruct> unit;
  final List<ClassComponents> options;

  final VoidCallback additionalItemsPrevBtn;
  final VoidCallback additionalItemsNextBtn;

  const AdditionalItemPage(this.unit, this.options, this.additionalItemsPrevBtn,
      this.additionalItemsNextBtn);

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

class _AdditionalItemPage extends State<AdditionalItemPage> {
  void deleteItem(int itemId) {
    context.read<AdditionalItemBloc>().add(DeleteAdditionalItems(id: itemId));
  }

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

  @override
  Widget build(BuildContext context) {
    return BlocConsumer<AdditionalItemBloc, AdditionalItemState>(
      listener: (context, state) {
        // TODO: implement listener
      },
      builder: (context, state) {
        final state = context.watch<AdditionalItemBloc>().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<AdditionalItemBloc>()
                                  .add(ShowAdditionalItems());
                            },
                            child: Row(
                              mainAxisSize: MainAxisSize.min,
                              children: const [
                                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.items.map((dataRow) {
                              return DataRow(
                                cells: [
                                  DataCell(Text(dataRow.className)),
                                  DataCell(Text(dataRow.baseUnitValue)),
                                  DataCell(Text(dataRow.unitValue)),
                                  DataCell(Text(((double.parse(
                                          dataRow.adjustedMarketVal)))
                                      .toString())),
                                  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: () {
                                          deleteItem(dataRow.id);
                                        },
                                      ),
                                      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',
                      style:
                          TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
                    ),
                    Text(
                      NumberFormat.currency(locale: 'en-PH', symbol: "₱")
                          .format(_totalMarketValue(state.items)),
                      style:
                          TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
                    )
                  ],
                ),
              ),
              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.additionalItemsPrevBtn();
                        }
                        ;
                      },
                    ),
                    CustomButton(
                      icon: const Icon(Icons.chevron_right_rounded,
                          color: Colors.white),
                      onPressed: () {
                        {
                          widget.additionalItemsNextBtn();
                        }
                        ;
                      },
                    )
                  ],
                ),
              ),
            ],
          );
        }
        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<AdditionalItemBloc>()
                    .add(const LoadAdditionalItems());
              });
            });
          }
        }
        if (state is ShowAddItemsScreen) {
          return ConstrainedBox(
            constraints: 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: AddExtraItems(widget.unit, widget.options))
                ],
              ),
            ),
          );
        }
        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<AdditionalItemBloc>()
                        .add(ShowAdditionalItems());
                  },
                  child: Row(
                    mainAxisSize: MainAxisSize.min,
                    children: const [
                      Text('ADD ITEM'), // <-- Text
                      SizedBox(
                        width: 5,
                      ),
                      Icon(
                        // <-- Icon
                        Icons.add,
                        size: 24.0,
                      ),
                    ],
                  ),
                ),
              ),
            ],
          ),
        );
      },
    );
  }
}
