import 'package:diplomaticquarterapp/core/model/prescriptions/prescriptions_order.dart';
import 'package:diplomaticquarterapp/core/viewModels/er/rrt-view-model.dart';
import 'package:diplomaticquarterapp/locator.dart';
import 'package:diplomaticquarterapp/models/rrt/service_price.dart';
import 'package:diplomaticquarterapp/pages/ErService/rapid-response-team/rrt-agreement-page.dart';
import 'package:diplomaticquarterapp/pages/ErService/rapid-response-team/rrt-order-list-item.dart';
import 'package:diplomaticquarterapp/pages/ErService/rapid-response-team/rrt-pickup-address-page.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class RRTRequestPage extends StatefulWidget{

  final  List<PrescriptionsOrder> pendingOrders;
  final ServicePrice servicePrice;

  RRTRequestPage({this.pendingOrders, this.servicePrice});

  @override
  State<StatefulWidget> createState()  =>  RRTRequestPageState();

}
class RRTRequestPageState extends State<RRTRequestPage>{
  bool acceptTerms = false;

  TranslationBase localize;
  RRTViewModel viewModel;

  @override
  Widget build(BuildContext context) {
    localize = TranslationBase.of(context);
    return BaseView<RRTViewModel>(
      onModelReady: (vm){
        viewModel = vm;
      },
      builder: (ctx, vm, widgetState){

        if(widget.pendingOrders.isNotEmpty)
          return currentOrderContent();
        else
          return requestContent();

      },
    );

  }

  Widget requestContent(){
    return Column(
      children: [
        Expanded(
          child: ListView(
            padding: EdgeInsets.symmetric(horizontal: 20, vertical: 15),
            children: [
              serviceDescription(context),
              SizedBox(height: 20),
              priceTable(context),

              acceptPolicy(),

              Container(height: 0.5, color: Theme.of(context).appBarTheme.color),//  Seperator

              Container(
                  padding: EdgeInsets.only(top: 20, bottom: 5),
                  alignment: Alignment.center,
                  child: Text(localize.youCanPayByTheFollowingOptions, style: TextStyle(fontSize: 13, color: Theme.of(context).appBarTheme.color, fontWeight: FontWeight.w500), maxLines: 2)
              ),

              paymentOptions(),
            ],
          ),
        ),

        actionButtons()
      ],
    );
  }

  Widget currentOrderContent(){
    var orders = widget.pendingOrders;
    return ListView.builder(
        itemCount: orders.length,
        itemBuilder: (ctx, idx) {
          var order =  orders[idx];
          return RRTLogListItem(order, onCancel: deleteOrder);
        }
    );
  }

  Widget serviceDescription(BuildContext context) =>
      Padding(
        padding: const EdgeInsets.symmetric(horizontal: 10),
        child: Text(
          localize.rrtDDetails,
          textAlign: TextAlign.justify,
          style: TextStyle(color: Theme.of(context).appBarTheme.color, fontSize: 15, height: 1.5, fontWeight: FontWeight.w300),
        ),
      );

  Widget priceTable(BuildContext context){
    var radius = Radius.circular(8);
    String amount = widget.servicePrice.price.toString();
    String vat = widget.servicePrice.vat.toString();
    String total = widget.servicePrice.totalPrice.toString();
    return Column(
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: [
        Container(
          height: 30,
          decoration: BoxDecoration(color: Theme.of(context).appBarTheme.color, borderRadius: BorderRadius.only(topLeft: radius, topRight: radius)),
          child: Center(child: Text(localize.approximateServiceFee, style: TextStyle(color: Colors.white, fontSize: 12, fontWeight: FontWeight.w500, letterSpacing: 1))),
        ),

        pricingRow(label: localize.amountBeforeTax, value: '$amount ${localize.sar}'),
        Container(height: 0.5, color: Theme.of(context).appBarTheme.color),

        pricingRow(label: localize.taxAmount, value: '$vat ${localize.sar}'),
        Container(height: 0.5, color: Theme.of(context).appBarTheme.color),

        pricingRow(label: localize.totalAmountPayable, value: '$total ${localize.sar}', labelBold: true),
        Container(height: 0.5, color: Theme.of(context).appBarTheme.color),
      ],
    );
  }

  Widget pricingRow({@required String label, @required String value, bool labelBold = false, bool valueBold = false}){
    return
      Container(
        height: 40, margin: EdgeInsets.symmetric(horizontal: 10),
        child: Row(
          children: [
            Text(label, style: TextStyle(fontSize: 13, color: Theme.of(context).appBarTheme.color, fontWeight: labelBold ? FontWeight.bold : FontWeight.normal)),
            Spacer(),
            Container(height: 40, color: Theme.of(context).appBarTheme.color, width: 0.5,),
            Container(
                alignment: Alignment.center,
                width: MediaQuery.of(context).size.width * 0.25,
                child: Text(value, style: TextStyle(fontSize: 13, color: Theme.of(context).appBarTheme.color, fontWeight: valueBold ? FontWeight.bold : FontWeight.normal))
            ),
          ],
        ),
      );
  }


  Widget acceptPolicy(){
    return Padding(
      padding: const EdgeInsets.symmetric(vertical: 10),
      child: Row(
        children: [
          Checkbox(value: acceptTerms, onChanged: (v){
            setState(() => acceptTerms = v);
          }),
          SizedBox(width: 10),
          Expanded(
              child: Text(localize.iAcceptTermsConditions, style: TextStyle(fontSize: 13, color: Theme.of(context).appBarTheme.color), maxLines: 2)
          ),
          Container(
            alignment: Alignment.center,
            width: MediaQuery.of(context).size.width * 0.25,
            child: TextButton(
                child: Text(localize.clickHere, style: TextStyle(fontSize: 12, color: Colors.blue, fontWeight: FontWeight.w400)),
                onPressed: (){
                  Navigator.push(
                      context,
                      FadePage(
                          page: RRTAgreementPage()));
                }
            ),
          )
        ],
      ),
    );
  }

  Widget paymentOptions()=> Container(
      height: 30,
      alignment: Alignment.center,
      child:  Image.asset("assets/payment_options/payment_options.png", fit: BoxFit.fill,)
  );

  Widget actionButtons(){
    return Container(
      margin: EdgeInsets.all(15),
      child: Row(
        children: [
          Expanded(
            child: MaterialButton(
              height: 50,
              color: Theme.of(context).appBarTheme.color,
              shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10) ),
              onPressed: () {  },
              child: Text(localize.cancel, style: TextStyle(color: Colors.white, fontSize: 13, letterSpacing: 1),),

            ),
          ),
          SizedBox(width: 20,),
          Expanded(
            child: MaterialButton(
                height: 50,
                color: Theme.of(context).appBarTheme.color,
                shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10) ),
                child: Text(localize.ok, style: TextStyle(color: Colors.white, fontSize: 13, letterSpacing: 1),),
                onPressed:  () {
                  if(acceptTerms)
                    goToPickupAddress();
                  else
                    AppToast.showErrorToast(message: localize.pleaseAcceptTerms);
                }
            ),
          )
        ],
      ),
    );
  }
  
  goToPickupAddress()async{
    Navigator.push(
        context,
        FadePage(page: RRTRequestPickupAddressPage(servicePrice: widget.servicePrice,))
    );
  }



  deleteOrder(PrescriptionsOrder order) async {
    GifLoaderDialogUtils.showMyDialog(context);
    var success = await viewModel.cancelOrder(order);
    GifLoaderDialogUtils.hideDialog(context);
    if(success)
      setState(() {
        widget.pendingOrders.remove(order);
      });
  }
}