import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/model/labs/lab_result.dart';
import 'package:diplomaticquarterapp/core/model/labs/patient_lab_orders.dart';
import 'package:diplomaticquarterapp/core/model/labs/patient_lab_special_result.dart';
import 'package:diplomaticquarterapp/core/model/labs/request_patient_lab_orders.dart';
import 'package:diplomaticquarterapp/core/model/labs/request_patient_lab_special_result.dart';
import 'package:diplomaticquarterapp/core/model/labs/request_send_lab_report_email.dart';
import 'package:diplomaticquarterapp/core/service/base_service.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';

class LabsService extends BaseService {
  RequestPatientLabOrders _requestPatientLabOrders = RequestPatientLabOrders();
  List<PatientLabOrders> patientLabOrdersList = List();

  Future getPatientLabOrdersList() async {
    await baseAppClient.post(GET_Patient_LAB_ORDERS,
        onSuccess: (dynamic response, int statusCode) {
      patientLabOrdersList.clear();
      response['ListPLO'].forEach((hospital) {
        patientLabOrdersList.add(PatientLabOrders.fromJson(hospital));
      });
    }, onFailure: (String error, int statusCode) {
      hasError = true;
      super.error = error;
    }, body: _requestPatientLabOrders.toJson());
  }

  RequestPatientLabSpecialResult _requestPatientLabSpecialResult =
      RequestPatientLabSpecialResult();

  List<PatientLabSpecialResult> patientLabSpecialResult = List();
  List<LabResult> labResultList = List();

  Future getLaboratoryResult(
      {String projectID,
      int clinicID,
      String invoiceNo,
      String orderNo}) async {
    hasError = false;
    _requestPatientLabSpecialResult.projectID = projectID;
    _requestPatientLabSpecialResult.clinicID = clinicID;
    _requestPatientLabSpecialResult.invoiceNo = invoiceNo; //'1800296522';//;
    _requestPatientLabSpecialResult.orderNo = orderNo;

    await baseAppClient.post(GET_Patient_LAB_SPECIAL_RESULT,
        onSuccess: (dynamic response, int statusCode) {
      patientLabSpecialResult.clear();
      response['ListPLSR'].forEach((hospital) {
        patientLabSpecialResult.add(PatientLabSpecialResult.fromJson(hospital));
      });
    }, onFailure: (String error, int statusCode) {
      hasError = true;
      super.error = error;
    }, body: _requestPatientLabSpecialResult.toJson());
  }

  Future getPatientLabResult({PatientLabOrders patientLabOrder}) async {
    hasError = false;
    Map<String, dynamic> body = Map();
    body['InvoiceNo'] = patientLabOrder.invoiceNo;
    body['OrderNo'] = patientLabOrder.orderNo;
    body['Procedure'] = "U/A";
    body['ProjectID'] = patientLabOrder.projectID;
    body['ClinicID'] = patientLabOrder.clinicID;
    //TODO Check the res
    await baseAppClient.post(GET_Patient_LAB_RESULT,
        onSuccess: (dynamic response, int statusCode) {
      patientLabSpecialResult.clear();
      response['ListPLR'].forEach((lab) {
        labResultList.add(LabResult.fromJson(lab));
      });
    }, onFailure: (String error, int statusCode) {
      hasError = true;
      super.error = error;
    }, body: body);
  }

  RequestSendLabReportEmail _requestSendLabReportEmail =
      RequestSendLabReportEmail();

  Future sendLabReportEmail({PatientLabOrders patientLabOrder}) async {
    _requestSendLabReportEmail.projectID = patientLabOrder.projectID;
    _requestSendLabReportEmail.invoiceNo = patientLabOrder.invoiceNo;
    _requestSendLabReportEmail.doctorName = patientLabOrder.doctorName;
    _requestSendLabReportEmail.clinicName = patientLabOrder.clinicDescription;
    _requestSendLabReportEmail.patientName = user.firstName + user.lastName;
    _requestSendLabReportEmail.patientIditificationNum =
        user.patientIdentificationNo;
    _requestSendLabReportEmail.dateofBirth = user.dateofBirth;
    _requestSendLabReportEmail.to = user.emailAddress;
    _requestSendLabReportEmail.orderDate =
        '${patientLabOrder.orderDate.year}-${patientLabOrder.orderDate.month}-${patientLabOrder.orderDate.day}';
    _requestSendLabReportEmail.patientMobileNumber = user.mobileNumber;
    _requestSendLabReportEmail.projectName = patientLabOrder.projectName;

    await baseAppClient.post(GET_Patient_LAB_SPECIAL_RESULT,
        onSuccess: (dynamic response, int statusCode) {
      AppToast.showSuccessToast(message: 'A copy has been sent to the email');
    }, onFailure: (String error, int statusCode) {
      hasError = true;
      super.error = error;
    }, body: _requestSendLabReportEmail.toJson());
  }
}
