package com.example.myapplication
	import android.content.Context
	import android.content.Context.LOCATION_SERVICE
	import android.content.pm.PackageManager
	import android.location.Location
	import android.location.LocationListener
	import android.location.LocationManager
	import android.os.Bundle
	import android.util.Log
	import androidx.core.app.ActivityCompat
	class TrackLocation(private val mContext: Context) : LocationListener {
	    // Flag for GPS status
	    var isGPSEnabled = false
	    // Flag for network status
	    var isNetworkEnabled = false
	    // Flag for GPS status
	    var canGetLocation = false
	    lateinit var location: Location  // Location
	    private val MIN_DISTANCE_CHANGE_FOR_UPDATES: Long = 10 // 10 meters
	    // The minimum time between updates in milliseconds
	    private val MIN_TIME_BW_UPDATES = (1000 * 60 * 1).toLong() // 1 minute
	    // Declaring a Location Manager
	    protected var locationManager: LocationManager? = null
	    init {
	        getCurrentLocation()
	    }
	    fun getCurrentLocation(): Location {
	        try {
	            locationManager = mContext.getSystemService(LOCATION_SERVICE) as LocationManager?
	            isGPSEnabled = locationManager!!.isProviderEnabled(LocationManager.GPS_PROVIDER)
	            isNetworkEnabled = locationManager!!.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
	            //check permission
	            if (ActivityCompat.checkSelfPermission(mContext, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mContext, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
	                Log.v("TAG ","No permission Granted")
	            }else{
	                if (!isNetworkEnabled) {
	                } else {
	                    this.canGetLocation = true
	                    locationManager!!.requestLocationUpdates(
	                        LocationManager.NETWORK_PROVIDER,
	                        MIN_TIME_BW_UPDATES,
	                        MIN_DISTANCE_CHANGE_FOR_UPDATES.toFloat(), this
	                    )
	                    if (locationManager != null) {
	                        location = locationManager!!
	                            .getLastKnownLocation(LocationManager.NETWORK_PROVIDER)
	                    }
	                }
	                if (!isGPSEnabled) {
	                } else {
	                    this.canGetLocation = true
	                    // If GPS enabled, get latitude/longitude using GPS Services
	                    locationManager!!.requestLocationUpdates(
	                        LocationManager.GPS_PROVIDER,
	                        MIN_TIME_BW_UPDATES,
	                        MIN_DISTANCE_CHANGE_FOR_UPDATES.toFloat(), this
	                    )
	                    if (locationManager != null) {
	                        location = locationManager!!
	                            .getLastKnownLocation(LocationManager.GPS_PROVIDER)
	                    }
	                }
	            }
	        } catch (e: Exception) {
	            e.printStackTrace()
	        }
	        return location
	    }
	    fun canWeGetLocation(): Boolean {
	        return this.canGetLocation
	    }
	    override fun onLocationChanged(location: Location) {}
	    override fun onProviderDisabled(provider: String) {}
	    override fun onProviderEnabled(provider: String) {}
	    override fun onStatusChanged(provider: String, status: Int, extras: Bundle) {}
	}