package mindtrack.muslimorganizer.calculator.location;

/**
 * Created by sobh on 4/8/2017.
 */

import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.support.v7.app.AlertDialog;
import android.text.InputType;
import android.widget.EditText;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

import mindtrack.muslimorganizer.R;

public class Utility {

    public static String getStringPrefs (Context context, String prefsKey , String defaultValue){
        return PreferenceManager.getDefaultSharedPreferences(context).getString(prefsKey, defaultValue);
    }

    public static void saveStringPrefs (Context context, String prefsKey, String prefsValue){
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
        preferences.edit().putString(prefsKey, prefsValue).apply();
    }

    public static Date getCurrentTime (){
        return Calendar.getInstance(TimeZone.getTimeZone("UTC")).getTime();
    }

    public static Date parseDate (String sDate){

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
        Date date = null;
        try {
            date = sdf.parse(sDate);
        } catch (ParseException e) {}

        return date;
    }

    public static String formatDate (Date date){

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
        return sdf.format(date);
    }

    public static String getAndroidID(Context context)
    {
        return Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
    }

    public static void getInput(Context context, String title, DialogInterface.OnClickListener onOkListener)
    {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle(title);

        final EditText input = new EditText(context);
        input.setInputType(InputType.TYPE_CLASS_TEXT);
        input.setId(R.id.text1);
        builder.setView(input);

        builder.setPositiveButton("OK", onOkListener);

        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        builder.show();
    }

    public static String getInputText(DialogInterface dialog)
    {
        return ((EditText) ((AlertDialog) dialog).findViewById(R.id.text1)).getText().toString();
    }

    public static double getGeoDistance(double latitude1, double  longitude1, double  latitude2, double longitude2)
    {
        final double r = 6373; // Radius of the earth in km
        double dLatitude = Math.toRadians(latitude2-latitude1);  // deg2rad below
        double dLongitude = Math.toRadians(longitude2-longitude1);

        double a = Math.sin(dLatitude/2) * Math.sin(dLatitude/2) + Math.cos(Math.toRadians(latitude1)) * Math.cos(Math.toRadians(latitude2)) *  Math.sin(dLongitude/2) * Math.sin(dLongitude/2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
        double d = r * c; // Distance in km

        return 1000 * Math.abs(d);
    }
}