import 'dart:convert';

import 'package:diplomaticquarterapp/models/CovidDriveThru/CovidPaymentInfoResponse.dart';
import 'package:diplomaticquarterapp/models/CovidDriveThru/CovidTestProceduresResponse.dart';
import 'package:diplomaticquarterapp/pages/medical/labs/passport_update_page.dart';
import 'package:diplomaticquarterapp/services/covid-drivethru/covid-drivethru.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/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

import 'covid-payment-details.dart';

class CovidDirveThruQuestions extends StatefulWidget {
  final String projectId;
  final List<CovidTestProceduresResponse> proceduresList;

  CovidDirveThruQuestions({@required this.projectId, @required this.proceduresList});

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

class CovidDirveThruQuestionsState extends State<CovidDirveThruQuestions> {
  List qa;

  @override
  void initState() {
    super.initState();
    qa = getQuestionsFromJson();
  }

  TranslationBase localize;

  @override
  Widget build(BuildContext context) {
    localize = TranslationBase.of(context);
    var isArabic = localize.isArabic();
    return AppScaffold(
        appBarTitle: TranslationBase.of(context).covidTest,
        isShowAppBar: true,
        body: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Padding(
              padding: const EdgeInsets.all(20),
              child: Text(localize.covidSelectProcedure, style: TextStyle(fontSize: 17, letterSpacing: 1, fontWeight: FontWeight.bold)),
            ),
            Expanded(
                child: ListView.separated(
              padding: EdgeInsets.symmetric(horizontal: 20),
              itemCount: qa.length,
              itemBuilder: (ctx, idx) {
                var obj = qa[idx];
                var qtext = isArabic ? obj["questionAR"] : obj["questionEN"];

                return Padding(
                  padding: const EdgeInsets.symmetric(vertical: 10),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text(qtext, style: TextStyle(fontSize: 15, letterSpacing: 1.5)),
                      Row(
                        children: [
                          Radio<int>(
                              value: 1,
                              groupValue: obj["ans"],
                              onChanged: (newValue) {
                                setState(() {
                                  obj["ans"] = newValue;
                                });
                              }),
                          Text(localize.yes),
                        ],
                      ),
                      Row(
                        children: [
                          Radio<int>(
                              value: 0,
                              groupValue: obj["ans"],
                              onChanged: (newValue) {
                                setState(() {
                                  obj["ans"] = newValue;
                                });
                              }),
                          Text(localize.no),
                        ],
                      )
                    ],
                  ),
                );
              },
              separatorBuilder: (ctx, idx) => Divider(height: 0.25, color: Colors.grey.withOpacity(0.5)),
            )),
            Padding(
              padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
              child: FractionallySizedBox(
                widthFactor: 1,
                child: MaterialButton(
                    height: 50,
                    color: Theme.of(context).appBarTheme.color,
                    disabledColor: Theme.of(context).appBarTheme.color.withOpacity(0.25),
                    shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
                    child: Text(
                      localize.next,
                      style: TextStyle(color: Colors.white, fontSize: 13, letterSpacing: 1),
                    ),
                    onPressed: next),
              ),
            ),
          ],
        ));
  }

  next() async {
    bool all = true;
    qa.forEach((element) {
      all = all && (element["ans"] == 1 || element["ans"] == 0);
    });
    if (all) if (qa[0]["ans"] == 1) {
      openPassportUpdatePage();
    } else {
      getPaymentInfo(context, widget.projectId);
    }
    else
      AppToast.showErrorToast(message: localize.pleaseSelectAllQuestionToContinue);
  }

  openPassportUpdatePage() {
    Navigator.push(context, FadePage(page: PassportUpdatePage())).then((value) {
      print(value);
      if(value != null && value == true) {
        getPaymentInfo(context, widget.projectId);
      }
    });
  }

  List getQuestionsFromJson() {
    var questionsJson = """
  [{"id":1,"questionEN":"Is the test intended for travel?","questionAR":"هل تجري التحليل بغرض السفر؟","ans":2},{"id":2,"questionEN":"Coming from outside KSA within last 2 weeks?","questionAR":"هل قدمت من خارج المملكة خلال الأسبوعين الماضيين؟","ans":2},{"id":3,"questionEN":"Do you currently have fever?","questionAR":"هل تعاني حاليا من حرارة؟","ans":2},{"id":4,"questionEN":"Did you have fever in last 2 weeks?","questionAR":"هل عانيت من حرارة في الأسبوعين الماضيين؟","ans":2},{"id":5,"questionEN":"Do you have a sore throat?","questionAR":"هل لديك التهاب في الحلق؟","ans":2},{"id":6,"questionEN":"Do you have a runny nose?","questionAR":"هل لديك سيلان بالأنف؟"},{"id":7,"questionEN":"Do you have a cough?","questionAR":"هل لديك سعال؟","ans":2},{"id":8,"questionEN":"Do you have shortness of breath?","questionAR":"هل تعانين من ضيق في التنفس؟","ans":2},{"id":9,"questionEN":"Do you have nausea?","questionAR":"هل تعانين من غثيان؟","ans":2},{"id":10,"questionEN":"Do you have vomiting?","questionAR":"هل تعاني من القيء؟","ans":2},{"id":11,"questionEN":"Do you have a headache?","questionAR":"هل تعاني من صداع في الرأس؟","ans":2},{"id":12,"questionEN":"Do you have muscle pain?","questionAR":"هل تعانين من آلام عضلية؟","ans":2},{"id":13,"questionEN":"Do you have joint pain?","questionAR":"هل تعانين من آلام المفاصل؟","ans":2},{"id":14,"questionEN":"Do you have diarrhea?","questionAR":"هل لديك اسهال؟","ans":2}]""";
    var map = json.decode(questionsJson) as List;
    return map;
  }

  getPaymentInfo(BuildContext context, String projectID) {
    CovidDriveThruService service = new CovidDriveThruService();
    CovidPaymentInfoResponse covidPaymentInfoResponse = new CovidPaymentInfoResponse();
    GifLoaderDialogUtils.showMyDialog(context);
    service.getCovidPaymentInformation(context, int.parse(projectID), widget.proceduresList[0].procedureID).then((res) {
      GifLoaderDialogUtils.hideDialog(context);
      if (res['MessageStatus'] == 1) {
        covidPaymentInfoResponse = CovidPaymentInfoResponse.fromJson(res['COVID19_PatientShare']);
        Navigator.push(
            context,
            FadePage(
                page: CovidPaymentDetails(
              covidPaymentInfoResponse: covidPaymentInfoResponse,
              projectID: int.parse(projectID),
              proceduresList: widget.proceduresList,
            )));
      } else {}
    }).catchError((err) {
      print(err);
    });
  }
}
