import 'package:fcs/domain/entities/custom.dart';
import 'package:fcs/domain/entities/discount.dart';
import 'package:fcs/domain/entities/discount_rate.dart';
import 'package:fcs/domain/entities/rate.dart';
import 'package:fcs/helpers/theme.dart';
import 'package:fcs/localization/app_translations.dart';
import 'package:fcs/pages/rates/model/shipment_rate_model.dart';
import 'package:fcs/pages/widgets/bottom_up_page_route.dart';
import 'package:fcs/pages/widgets/input_text.dart';
import 'package:fcs/pages/widgets/my_data_table.dart';
import 'package:fcs/pages/widgets/progress.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:provider/provider.dart';

import 'package:flutter/material.dart';

import '../main/util.dart';
import 'cargo_editor.dart';
import 'custom_editor.dart';
import 'discount_by_weight_editor.dart';

class ShipmentRatesEdit extends StatefulWidget {
  ShipmentRatesEdit();

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

class _ShipmentRatesEditState extends State<ShipmentRatesEdit> {
  bool _isLoading = false;
  TextEditingController _minWeight = new TextEditingController();
  TextEditingController _deliveryFee = new TextEditingController();
  TextEditingController _volumetricRatio = new TextEditingController();

  @override
  void initState() {
    super.initState();
    _minWeight.text = "10";
    _deliveryFee.text = "5";
    _volumetricRatio.text = "166.36";
  }

  @override
  void dispose() {
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    var shipmentRateModel = Provider.of<ShipmentRateModel>(context);

    final minWigBox = InputText(
        labelTextKey: 'rate.min_weight',
        iconData: FontAwesomeIcons.weightHanging,
        controller: _minWeight);
    final feeBox = InputText(
        labelTextKey: 'rate.delivery_fee',
        iconData: Icons.attach_money,
        controller: _deliveryFee);
    final ratioBox = InputText(
        labelTextKey: 'rate.volumetric_ratio',
        iconData: Icons.attach_money,
        controller: _volumetricRatio);

    return LocalProgress(
      inAsyncCall: _isLoading,
      child: Scaffold(
        appBar: AppBar(
          centerTitle: true,
          leading: new IconButton(
            icon: new Icon(
              Icons.close,
            ),
            onPressed: () => Navigator.of(context).pop(),
          ),
          backgroundColor: primaryColor,
          title: Text(AppTranslations.of(context).text("rate.edit.title")),
        ),
        body: Container(
          padding: EdgeInsets.all(18),
          child: Column(
            children: <Widget>[
              Expanded(
                child: ListView(
                  children: <Widget>[
                    minWigBox,
                    feeBox,
                    ratioBox,
                    SizedBox(height: 10),
                    ExpansionTile(
                      title: Text(
                        'Cargo Types',
                        style: TextStyle(
                            color: primaryColor, fontWeight: FontWeight.bold),
                      ),
                      children: <Widget>[
                        Container(
                          child: SingleChildScrollView(
                            scrollDirection: Axis.horizontal,
                            child: MyDataTable(
                              headingRowHeight: 40,
                              columnSpacing: 50,
                              columns: [
                                MyDataColumn(
                                    label: Text("Cargo Type",
                                        style: TextStyle(
                                            fontSize: 15,
                                            color: Colors.grey[600]))),
                                MyDataColumn(
                                    label: Text("Rate",
                                        style: TextStyle(
                                            fontSize: 15,
                                            color: Colors.grey[600]))),
                                MyDataColumn(
                                    label: Text("Delete",
                                        style: TextStyle(
                                            fontSize: 15,
                                            color: Colors.grey[600]))),
                              ],
                              rows: getCargoRows(shipmentRateModel.rates),
                            ),
                          ),
                        ),
                        Container(
                          padding:
                              EdgeInsets.only(top: 20, bottom: 15, right: 15),
                          child: Align(
                            alignment: Alignment.bottomRight,
                            child: Container(
                              width: 120,
                              height: 40,
                              child: FloatingActionButton.extended(
                                materialTapTargetSize:
                                    MaterialTapTargetSize.shrinkWrap,
                                icon: Icon(Icons.add),
                                onPressed: () {
                                  Navigator.push(
                                    context,
                                    BottomUpPageRoute(CargoEditor()),
                                  );
                                },
                                label: Text(
                                  'Add Cargo',
                                  style: TextStyle(fontSize: 12),
                                ),
                                backgroundColor: primaryColor,
                              ),
                            ),
                          ),
                        )
                      ],
                    ),
                    ExpansionTile(
                      title: Text(
                        'Custom Duties',
                        style: TextStyle(
                            color: primaryColor, fontWeight: FontWeight.bold),
                      ),
                      children: <Widget>[
                        Container(
                          child: SingleChildScrollView(
                            scrollDirection: Axis.horizontal,
                            child: MyDataTable(
                              headingRowHeight: 40,
                              columnSpacing: 50,
                              columns: [
                                MyDataColumn(
                                    label: Text("Produt Type",
                                        style: TextStyle(
                                            fontSize: 15,
                                            color: Colors.grey[600]))),
                                MyDataColumn(
                                    label: Text("Fee",
                                        style: TextStyle(
                                            fontSize: 15,
                                            color: Colors.grey[600]))),
                                MyDataColumn(
                                    label: Text("Delete",
                                        style: TextStyle(
                                            fontSize: 15,
                                            color: Colors.grey[600]))),
                              ],
                              rows: getCustomsRows(shipmentRateModel.customs),
                            ),
                          ),
                        ),
                        Container(
                          padding:
                              EdgeInsets.only(top: 20, bottom: 15, right: 15),
                          child: Align(
                            alignment: Alignment.bottomRight,
                            child: Container(
                              width: 120,
                              height: 40,
                              child: FloatingActionButton.extended(
                                materialTapTargetSize:
                                    MaterialTapTargetSize.shrinkWrap,
                                icon: Icon(Icons.add),
                                onPressed: () {
                                  Navigator.push(
                                    context,
                                    BottomUpPageRoute(CustomEditor()),
                                  );
                                },
                                label: Text(
                                  'Add Custom\nDuty',
                                  style: TextStyle(fontSize: 12),
                                ),
                                backgroundColor: primaryColor,
                              ),
                            ),
                          ),
                        )
                      ],
                    ),
                    ExpansionTile(
                      title: Text(
                        'Discounts by weight',
                        style: TextStyle(
                            color: primaryColor, fontWeight: FontWeight.bold),
                      ),
                      children: <Widget>[
                        Container(
                          child: SingleChildScrollView(
                            scrollDirection: Axis.horizontal,
                            child: MyDataTable(
                              headingRowHeight: 40,
                              columnSpacing: 30,
                              columns: [
                                MyDataColumn(
                                    label: Text("Weight",
                                        style: TextStyle(
                                            fontSize: 15,
                                            color: Colors.grey[600]))),
                                MyDataColumn(
                                    label: Text("Discount Rate",
                                        style: TextStyle(
                                            fontSize: 15,
                                            color: Colors.grey[600]))),
                                MyDataColumn(
                                    label: Text("Delete",
                                        style: TextStyle(
                                            fontSize: 15,
                                            color: Colors.grey[600]))),
                              ],
                              rows: getDiscounts(
                                  shipmentRateModel.discountsByWeight),
                            ),
                          ),
                        ),
                        Container(
                          padding:
                              EdgeInsets.only(top: 20, bottom: 15, right: 15),
                          child: Align(
                            alignment: Alignment.bottomRight,
                            child: Container(
                              width: 130,
                              height: 40,
                              child: FloatingActionButton.extended(
                                materialTapTargetSize:
                                    MaterialTapTargetSize.shrinkWrap,
                                icon: Icon(Icons.add),
                                onPressed: () {
                                  Navigator.push(
                                    context,
                                    BottomUpPageRoute(DiscountByWeightEditor()),
                                  );
                                },
                                label: Text(
                                  'Add Discount',
                                  style: TextStyle(fontSize: 12),
                                ),
                                backgroundColor: primaryColor,
                              ),
                            ),
                          ),
                        )
                      ],
                    ),
                  ],
                ),
              ),
              fcsButton(context, "Save", callack: () {
                Navigator.pop(context);
              }),
              SizedBox(height: 10)
            ],
          ),
        ),
      ),
    );
  }

  List<MyDataRow> getCargoRows(List<Rate> rates) {
    return rates.map((r) {
      return MyDataRow(
        onSelectChanged: (selected) {
          Navigator.push(
            context,
            BottomUpPageRoute(CargoEditor(rate: r)),
          );
        },
        cells: [
          MyDataCell(
            new Text(
              r.description,
              style: textStyle,
            ),
          ),
          MyDataCell(
            new Text(
              r.price.toString(),
              style: textStyle,
            ),
          ),
          MyDataCell(IconButton(icon: Icon(Icons.delete), onPressed: null)),
        ],
      );
    }).toList();
  }

  List<MyDataRow> getCustomsRows(List<Custom> customs) {
    return customs.map((c) {
      return MyDataRow(
        onSelectChanged: (selected) {
          Navigator.push(
            context,
            BottomUpPageRoute(CustomEditor(custom: c)),
          );
        },
        cells: [
          MyDataCell(
            new Text(
              c.productType,
              style: textStyle,
            ),
          ),
          MyDataCell(
            new Text(
              c.fee.toString(),
              style: textStyle,
            ),
          ),
          MyDataCell(IconButton(icon: Icon(Icons.delete), onPressed: null)),
        ],
      );
    }).toList();
  }

  List<MyDataRow> getDiscounts(List<DiscountRate> discounts) {
    return discounts.map((d) {
      return MyDataRow(
        onSelectChanged: (selected) {
          // Navigator.push(
          //   context,
          //   BottomUpPageRoute(CargoEditor(rate: r)),
          // );
        },
        cells: [
          MyDataCell(
            new Text(
              "${d.weight} lb",
              style: textStyle,
            ),
          ),
          MyDataCell(
            Center(
              child: new Text(
                d.discountRate.toString(),
                style: textStyle,
              ),
            ),
          ),
          MyDataCell(IconButton(icon: Icon(Icons.delete), onPressed: null)),
        ],
      );
    }).toList();
  }

  _row(String desc, String price, String unit) {
    return Container(
        padding: EdgeInsets.only(left: 25, top: 5, bottom: 5),
        child: Row(
          children: <Widget>[
            Text('$desc ', style: TextStyle(fontSize: 15)),
            Spacer(),
            Column(
              crossAxisAlignment: CrossAxisAlignment.end,
              children: <Widget>[
                Padding(
                  padding: const EdgeInsets.only(bottom: 3.0),
                  child: Text(
                    '$price',
                    style: TextStyle(color: primaryColor, fontSize: 14),
                  ),
                ),
                Text(
                  '$unit',
                  style: TextStyle(color: Colors.grey, fontSize: 14),
                ),
              ],
            ),
            SizedBox(
              width: 50,
            ),
          ],
        ));
  }
}
