package io.trewartha.positional;

import android.location.Location;
import android.support.annotation.NonNull;

class UnitConverter {

    private static final double FEET_PER_METER = 3.2808399200439453;
    private static final double MPH_PER_MPS = 0.44704;

    static double metersToFeet(double meters) {
        return meters * FEET_PER_METER;
    }

    static double metersPerSecondToMilesPerHour(double metersPerSecond) {
        return metersPerSecond * MPH_PER_MPS;
    }

    @NonNull
    static String getLatitudeAsDMS(@NonNull Location location, int decimalPlaces) {
        String latitude = Location.convert(location.getLatitude(), Location.FORMAT_SECONDS);
        latitude = replaceDelimiters(latitude, decimalPlaces);
        latitude = latitude + " N";
        return latitude;
    }

    @NonNull
    static String getLongitudeAsDMS(@NonNull Location location, int decimalPlaces) {
        String longitude = Location.convert(location.getLongitude(), Location.FORMAT_SECONDS);
        longitude = replaceDelimiters(longitude, decimalPlaces);
        longitude = longitude + " W";
        return longitude;
    }

    @NonNull
    private static String replaceDelimiters(String string, int decimalPlace) {
        string = string.replaceFirst(":", "° ");
        string = string.replaceFirst(":", "' ");
        int pointIndex = string.indexOf(".");
        int endIndex = pointIndex + 1 + decimalPlace;
        if (endIndex < string.length()) {
            string = string.substring(0, endIndex);
        }
        string = string + "\"";
        return string;
    }
}

@@ -580,22 +580,28 @@
         
-String
+final double
  latitud
@@ -600,33 +600,33 @@
  latitude = 
-L
+l
 ocation.
 convert(loca
@@ -617,38 +617,77 @@
 ion.
-convert(location.getL
+getLatitude();%0A        String latitudeDMS = Location.convert(l
 atitude
-()
 , Lo
@@ -722,24 +722,27 @@
     latitude
+DMS
  = replaceDe
@@ -754,24 +754,27 @@
 ers(latitude
+DMS
 , decimalPla
@@ -779,32 +779,36 @@
 laces);%0A        
+if (
 latitude = latit
@@ -804,26 +804,158 @@
 ude 
+%3E
 = 
-latitude + %22 N%22;
+0.0) %7B%0A            latitudeDMS = latitudeDMS + %22 N%22;%0A        %7D else %7B%0A            latitudeDMS = latitudeDMS.replaceFirst(%22-%22, %22%22) + %22 S%22;%0A        %7D
 %0A   
@@ -970,24 +970,27 @@
 urn latitude
+DMS
 ;%0A    %7D%0A%0A   
@@ -1092,22 +1092,28 @@
         
-String
+final double
  longitu
@@ -1117,25 +1117,25 @@
 itude = 
-L
+l
 ocation.
 convert(
@@ -1130,37 +1130,80 @@
 ion.
-convert(location.getL
+getLongitude();%0A        String longitudeDMS = Location.convert(l
 ongitude
 (), 
@@ -1198,18 +1198,16 @@
 ongitude
-()
 , Locati
@@ -1243,16 +1243,19 @@
 ongitude
+DMS
  = repla
@@ -1276,16 +1276,19 @@
 ongitude
+DMS
 , decima
@@ -1297,32 +1297,36 @@
 laces);%0A        
+if (
 longitude = long
@@ -1323,19 +1323,144 @@
 ude 
+%3E
 = 
-longitude
+0.0) %7B%0A            longitudeDMS = longitudeDMS + %22 E%22;%0A        %7D else %7B%0A            longitudeDMS = longitudeDMS.replaceFirst(%22-%22, %22%22)
  + %22
@@ -1464,16 +1464,26 @@
 + %22 W%22;%0A
+        %7D%0A
         
@@ -1498,16 +1498,19 @@
 ongitude
+DMS
 ;%0A    %7D%0A

Use S and E instead of -N and -W for DMS coordinates