import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:intl/intl.dart';
import 'package:unit2/bloc/offline/offline_passo/building/additional_items_offline/additional_items_offline_bloc.dart';
import 'package:unit2/model/offline/offline_profile.dart';
import 'package:unit2/screens/offline/passo/building/add/AddExtraItemsOffline.dart';

import '../../../../../utils/alerts.dart';
import '../../../../../widgets/passo/custom_button.dart';

class AdditionalItemOfflinePage extends StatefulWidget {
  final VoidCallback additionalItemsPrevBtn;
  final VoidCallback additionalItemsNextBtn;
  final OfflineProfile offlineProfile;

  const AdditionalItemOfflinePage(this.additionalItemsPrevBtn,
      this.additionalItemsNextBtn, this.offlineProfile);

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

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

  void deleteItem(int itemId) {
    context
        .read<AdditionalItemsOfflineBloc>()
        .add(DeleteAdditionalItems(id: itemId));
  }

  final items = [];

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: BlocConsumer<AdditionalItemsOfflineBloc,
            AdditionalItemsOfflineState>(
      listener: (context, state) {
        // TODO: implement listener
      },
      builder: (context, state) {
        if (state is AdditionalItemsOfflineInitial) {
          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,
                                  ),
                                ],
                              ),
                            ),
                          )
                        ]))))
          ]);
        }
        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('Area'),
                            ),
                            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(dataRow.baseUnitValue).toString())),
                                DataCell(Text(dataRow.area.toString())),
                                DataCell(Text(dataRow.unitValue.toString())),
                                DataCell(Text(NumberFormat.currency(
                                  locale: 'en-PH',
                                  symbol: "₱",
                                )
                                    .format(((double.parse(
                                        dataRow.adjustedMarketVal.toString()))))
                                    .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: () {
                                        confirmAlertWithCancel(
                                            context,
                                            () => deleteItem(dataRow.id!),
                                            () => null,
                                            'Delete Item?',
                                            "Are you sure you want to delete this item?");
                                      },
                                    ),
                                  ],
                                ))
                              ],
                            );
                          }).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.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<AdditionalItemsOfflineBloc>()
                    .add(LoadAdditionalItems());
              });
            });
          }
        }
        if (state is ShowAddItemsScreen) {
          return showDialog(context);
        }
        return Container();
      },
    ));
  }

  Widget showDialog(BuildContext context) {
    return AlertDialog(
      insetPadding: const EdgeInsets.symmetric(
        horizontal: 10.0,
        vertical: 20.0,
      ),
      title: const Text(
        'ADD ADDITIONAL ITEMS',
        textAlign: TextAlign.center,
      ),
      content: SingleChildScrollView(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            AddExtraItemsOffline(widget.offlineProfile),
          ],
        ),
      ),
    );
  }
}
