import 'dart:io';

import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
import 'package:diplomaticquarterapp/core/service/base_service.dart';
import 'package:diplomaticquarterapp/services/permission/permission_service.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:progress_hud_v2/generated/i18n.dart';

class HospitalService extends BaseService {
  List<HospitalsModel> _hospitals = List();

  List<HospitalsModel> get hospitals => _hospitals;

  double _latitude;
  double _longitude;

  _getCurrentLocation() async {
    if (await PermissionService.isLocationEnabled()) {
      Geolocator.getLastKnownPosition().then((value) {
        _latitude = value.latitude;
        _longitude = value.longitude;
      }).catchError((e) {
        _longitude = 0;
        _latitude = 0;
      });
    } else {
      if (Platform.isAndroid) {
        Utils.showPermissionConsentDialog(AppGlobal.context, TranslationBase.of(AppGlobal.context).locationPermissionDialog, () {
          Geolocator.getLastKnownPosition().then((value) {
            _latitude = value.latitude;
            _longitude = value.longitude;
          }).catchError((e) {
            _longitude = 0;
            _latitude = 0;
          });
        });
      } else {
        Geolocator.getLastKnownPosition().then((value) {
          _latitude = value.latitude;
          _longitude = value.longitude;
        }).catchError((e) {
          _longitude = 0;
          _latitude = 0;
        });
      }
    }
  }

  Future getHospitals({bool isResBasedOnLoc = true}) async {
    if (isResBasedOnLoc) await _getCurrentLocation();
    Map<String, dynamic> body = Map();
    body['Latitude'] = await this.sharedPref.getDouble(USER_LAT);
    body['Longitude'] = await this.sharedPref.getDouble(USER_LONG);
    body['IsOnlineCheckIn'] = isResBasedOnLoc;

    await baseAppClient.post(GET_PROJECT, onSuccess: (dynamic response, int statusCode) {
      _hospitals.clear();
      response['ListProject'].forEach((hospital) {
        _hospitals.add(HospitalsModel.fromJson(hospital));
      });
    }, onFailure: (String error, int statusCode) {
      hasError = true;
      super.error = error;
    }, body: body);
  }
}
