import 'package:fcs/domain/entities/box.dart';
import 'package:fcs/domain/entities/cargo.dart';
import 'package:fcs/domain/entities/package.dart';
import 'package:fcs/domain/vo/delivery_address.dart';
import 'package:fcs/helpers/theme.dart';
import 'package:fcs/localization/app_translations.dart';
import 'package:fcs/pages/delivery_address/delivery_address_row.dart';
import 'package:fcs/pages/delivery_address/model/delivery_address_model.dart';
import 'package:fcs/pages/widgets/local_text.dart';
import 'package:fcs/pages/widgets/my_data_table.dart';
import 'package:fcs/pages/widgets/progress.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:provider/provider.dart';

import '../main/util.dart';

class PickupBoxEditor extends StatefulWidget {
  final Box box;
  PickupBoxEditor({this.box});

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

class _PickupBoxEditorState extends State<PickupBoxEditor> {
  Box _box;
  bool _isLoading = false;

  bool isNew;

  bool isMixBox = false;
  DeliveryAddress _shippingAddress = new DeliveryAddress();

  @override
  void initState() {
    super.initState();
    if (widget.box != null) {
      _box = widget.box;
      _shippingAddress = _box.shippingAddress;

      isNew = false;
    } else {
      List<Package> packages = [
        // PackageModel.packages[0],
        // PackageModel.packages[1],
        // PackageModel.packages[2]
      ];

      List<Cargo> _cargoTypes = [
        Cargo(type: 'General Cargo', weight: 25),
        Cargo(type: 'Medicine', weight: 20),
        Cargo(type: 'Dangerous Cargo', weight: 30)
      ];

      var shipmentModel =
          Provider.of<DeliveryAddressModel>(context, listen: false);
      _shippingAddress = shipmentModel.deliveryAddresses[1];

      isNew = true;
      _box = Box(
          rate: 0,
          weight: 75,
          width: 0,
          height: 0,
          length: 0,
          packages: packages,
          cargoTypes: _cargoTypes,
          shipmentWeight: 0);
    }
  }

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

  @override
  Widget build(BuildContext context) {
    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("package.edit.title")),
        ),
        body: Card(
          child: Column(
            children: <Widget>[
              Expanded(
                child: ListView(
                  children: [
                    ExpansionTile(
                      title: Text(
                        'Cargo Types',
                        style: TextStyle(
                            color: primaryColor, fontWeight: FontWeight.bold),
                      ),
                      children: [
                        Padding(
                          padding: const EdgeInsets.only(left: 20.0, right: 20),
                          child: TextFormField(
                              initialValue: _box.weight.toString(),
                              textAlign: TextAlign.end,
                              decoration: InputDecoration(
                                fillColor: Colors.white,
                                labelText: 'Actual Weight',
                                filled: true,
                                icon: Icon(FontAwesomeIcons.weightHanging,
                                    color: primaryColor),
                              )),
                        ),
                        Container(
                          padding: EdgeInsets.only(top: 10),
                          child: SingleChildScrollView(
                            scrollDirection: Axis.horizontal,
                            child: MyDataTable(
                              headingRowHeight: 40,
                              columnSpacing: 120,
                              columns: [
                                MyDataColumn(
                                  label: LocalText(
                                    context,
                                    "cargo.type",
                                    color: Colors.grey,
                                  ),
                                ),
                                MyDataColumn(
                                  label: LocalText(
                                    context,
                                    "cargo.weight",
                                    color: Colors.grey,
                                  ),
                                ),
                              ],
                              rows: getCargoRows(context),
                            ),
                          ),
                        ),
                        Container(
                          padding: EdgeInsets.only(top: 20),
                          child: Align(
                            alignment: Alignment.bottomRight,
                            child: FloatingActionButton.extended(
                              icon: Icon(Icons.add),
                              label: Text("Add Cargo"),
                              backgroundColor: primaryColor,
                              onPressed: () {
                                // Navigator.of(context).push(
                                //     BottomUpPageRoute(PackageAddition()));
                              },
                            ),
                          ),
                        ),
                        SizedBox(height: 25),
                      ],
                    ),
                    ExpansionTile(
                      title: Text(
                        'Box Dimension',
                        style: TextStyle(
                            color: primaryColor, fontWeight: FontWeight.bold),
                      ),
                      children: [
                        Padding(
                          padding: const EdgeInsets.only(left: 20.0, right: 20),
                          child: fcsInputReadOnly(
                              "Shipment Weight", FontAwesomeIcons.weightHanging,
                              value: _box.shipmentWeight.toString()),
                        ),
                        Padding(
                          padding: const EdgeInsets.only(left: 20.0, right: 20),
                          child: TextFormField(
                              initialValue: _box.width.toString(),
                              textAlign: TextAlign.end,
                              decoration: InputDecoration(
                                fillColor: Colors.white,
                                labelText: 'Width',
                                filled: true,
                                icon: Icon(FontAwesomeIcons.arrowCircleRight,
                                    color: primaryColor),
                              )),
                        ),
                        Padding(
                          padding: const EdgeInsets.only(left: 20.0, right: 20),
                          child: TextFormField(
                              initialValue: _box.height.toString(),
                              textAlign: TextAlign.end,
                              decoration: InputDecoration(
                                fillColor: Colors.white,
                                labelText: 'Height',
                                filled: true,
                                icon: Icon(FontAwesomeIcons.arrowAltCircleUp,
                                    color: primaryColor),
                              )),
                        ),
                        Padding(
                          padding: const EdgeInsets.only(left: 20.0, right: 20),
                          child: TextFormField(
                              initialValue: _box.length.toString(),
                              textAlign: TextAlign.end,
                              decoration: InputDecoration(
                                fillColor: Colors.white,
                                labelText: 'Length',
                                filled: true,
                                icon: Icon(FontAwesomeIcons.arrowCircleUp,
                                    color: primaryColor),
                              )),
                        ),
                        SizedBox(height: 25),
                      ],
                    ),
                    ExpansionTile(
                      title: Text(
                        'Shipment Address',
                        style: TextStyle(
                            color: primaryColor, fontWeight: FontWeight.bold),
                      ),
                      children: [
                        DeliveryAddressRow(shippingAddress: _shippingAddress),
                        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,
                                onPressed: () {},
                                icon: Icon(Icons.add),
                                label: Text(
                                  'Select\nAddress',
                                  style: TextStyle(fontSize: 12),
                                ),
                                backgroundColor: primaryColor,
                              ),
                            ),
                          ),
                        ),
                        SizedBox(height: 25),
                      ],
                    ),
                  ],
                ),
              ),
              widget.box == null
                  ? Align(
                      alignment: Alignment.bottomCenter,
                      child: Center(
                          child: Container(
                        width: 250,
                        child: FlatButton(
                          child: Text('Create New Package'),
                          color: primaryColor,
                          textColor: Colors.white,
                          onPressed: () {
                            Navigator.pop(context);
                          },
                        ),
                      )))
                  : Container(
                      child: Column(
                      children: <Widget>[
                        Align(
                            alignment: Alignment.bottomCenter,
                            child: Center(
                                child: Container(
                              width: 250,
                              child: FlatButton(
                                child: Text('Update Package'),
                                color: primaryColor,
                                textColor: Colors.white,
                                onPressed: () {
                                  Navigator.pop(context);
                                },
                              ),
                            ))),
                      ],
                    ))
            ],
          ),
        ),
      ),
    );
  }

  List<MyDataRow> getCargoRows(BuildContext context) {
    if (_box == null || _box.cargoTypes == null) {
      return [];
    }
    return _box.cargoTypes.map((c) {
      return MyDataRow(
        onSelectChanged: (bool selected) {},
        cells: [
          MyDataCell(new Text(
            c.type == null ? "" : c.type,
            style: textStyle,
          )),
          MyDataCell(
            new Text(c.weight == null ? "0" : c.weight.toString(),
                style: textStyle),
          ),
        ],
      );
    }).toList();
  }
}
