import 'package:fcs/domain/entities/discount.dart';
import 'package:fcs/domain/entities/user.dart';
import 'package:fcs/helpers/theme.dart';
import 'package:fcs/localization/app_translations.dart';
import 'package:fcs/pages/discount/model/discount_model.dart';
import 'package:fcs/pages/main/util.dart';
import 'package:fcs/pages/rates/model/shipment_rate_model.dart';
import 'package:fcs/pages/user_search/user_serach.dart';
import 'package:fcs/pages/widgets/display_text.dart';
import 'package:fcs/pages/widgets/input_text.dart';
import 'package:fcs/pages/widgets/progress.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:provider/provider.dart';

class DiscountEditor extends StatefulWidget {
  final Discount discount;

  const DiscountEditor({Key key, this.discount}) : super(key: key);
  @override
  _DiscountEditorState createState() => _DiscountEditorState();
}

class _DiscountEditorState extends State<DiscountEditor> {
  bool _isLoading = false;
  Discount _discount = new Discount();
  TextEditingController _codeController = new TextEditingController();
  TextEditingController _amountController = new TextEditingController();
  TextEditingController _statusController = new TextEditingController();

  bool _isNew = false;
  String customerName = '';
  String customerId = '';

  @override
  void initState() {
    super.initState();
    if (widget.discount != null) {
      _discount = widget.discount;
      _codeController.text = _discount.code;
      _amountController.text = _discount.amount.toString();
      _statusController.text = _discount.status;
      customerName = widget.discount.customerName;
      customerId = widget.discount.customerId;
    } else {
      _isNew = true;
    }
  }

  @override
  Widget build(BuildContext context) {
    final codeBox = InputText(
        labelTextKey: 'discount.code',
        iconData: FontAwesomeIcons.algolia,
        controller: _codeController);

    final amountBox = InputText(
        labelTextKey: 'discount.amount',
        iconData: FontAwesomeIcons.moneyBill,
        controller: _amountController);

    final statusBox = DisplayText(
      text: _statusController.text,
      labelTextKey: "discount.status",
      iconData: Icons.av_timer,
    );

    final customerBox = Row(
      children: <Widget>[
        Expanded(
            child: DisplayText(
          text: customerName != null ? customerName : "",
          labelTextKey: "discount.name",
          iconData: Feather.user,
        )),
        IconButton(
            icon: Icon(Icons.search, color: primaryColor),
            onPressed: () => searchUser(context, callbackUserSelect: (u) {
                  setState(() {
                    customerId = u.id;
                    customerName = u.name;
                  });
                })),
      ],
    );

    return LocalProgress(
      inAsyncCall: _isLoading,
      child: Scaffold(
          backgroundColor: Colors.white,
          appBar: AppBar(
            centerTitle: true,
            title: Text(
              AppTranslations.of(context).text("discount.form"),
            ),
            leading: new IconButton(
              icon: new Icon(CupertinoIcons.back),
              onPressed: () => Navigator.of(context).pop(),
            ),
            backgroundColor: primaryColor,
            actions: [
              IconButton(
                icon: Icon(Icons.delete),
                onPressed: _delete,
              )
            ],
          ),
          body: Padding(
            padding: const EdgeInsets.all(8.0),
            child: Column(
              children: <Widget>[
                Expanded(
                  child: ListView(
                    children: <Widget>[
                      codeBox,
                      amountBox,
                      SizedBox(height: 7),
                      customerBox,
                      SizedBox(height: 7),
                      widget.discount == null
                          ? Container()
                          : Container(
                              padding: EdgeInsets.only(top: 5),
                              child: statusBox,
                            ),
                    ],
                  ),
                ),
                fcsButton(context, getLocalString(context, "btn.save"),
                    callack: _save),
                SizedBox(
                  height: 30,
                )
              ],
            ),
          )),
    );
  }

  _save() async {
    setState(() {
      _isLoading = true;
    });
    try {
      DiscountModel discountModel =
          Provider.of<DiscountModel>(context, listen: false);
      Discount _discount = Discount(
          code: _codeController.text,
          customerName: customerName,
          customerId: customerId,
          amount: double.parse(_amountController.text));
      if (_isNew) {
        await discountModel.addDiscount(_discount);
      } else {
        _discount.id = widget.discount.id;
        await discountModel.updateDiscount(_discount);
      }
      Navigator.pop(context);
    } catch (e) {
      showMsgDialog(context, "Error", e.toString());
    } finally {
      setState(() {
        _isLoading = false;
      });
    }
  }

  _delete() {
    showConfirmDialog(
        context, "discount.edit.delete.confirm", _deleteCargoType);
  }

  _deleteCargoType() async {
    setState(() {
      _isLoading = true;
    });
    try {
      var discountModel = Provider.of<DiscountModel>(context, listen: false);
      await discountModel.deleteDiscount(widget.discount);
      Navigator.pop(context);
    } catch (e) {
      showMsgDialog(context, "Error", e.toString());
    } finally {
      setState(() {
        _isLoading = false;
      });
    }
  }
}
