package com.jcf.sportpager;

import android.app.Application;
import android.util.Log;
import android.webkit.WebView;

import com.google.firebase.iid.FirebaseInstanceId;
import com.google.gson.Gson;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.Timer;
import java.util.TimerTask;
import java.util.Vector;

/**
 * Created by jon on 12/09/2016.
 */
public class Aplicacion  extends Application
{
    private static final String TAG = "JCDBG";
    private static DatosSQLite base;
    public final static String SP_DATABASE = "SportPager.db";
    public final static int SP_DATABASE_VERSION = 1;

    //public final static String URL_SERVER = "http://10.0.0.230:5000";
    //public final static String URL_SERVER = "http://192.168.1.7:5000";
    public final static String URL_SERVER = "https://sportpager.herokuapp.com";
    //public final static String URL_SERVER = "http://192.168.0.2.:5000";
    private static Vector<SportPager> SportPagerVector;
    private static String dispositivoId;
    private static String dispositivoIdOld;
    private static WebView nav;
    private static Boolean actualizarRecibidos = false;
    private static int actualizarWebView = 0;

    //private static JSONArray SportPagerArray;
    @Override
    public void onCreate()
    {
        super.onCreate();
        base = new DatosSQLite(this, Aplicacion.SP_DATABASE, null, Aplicacion.SP_DATABASE_VERSION);
        //base.borrarTodosLosRegistrosDeLaBase();

        SportPagerVector = new Vector<SportPager>();
        /*
        leerSportPagerDeLaBase(); // va a parar a SportPagerVector
        String res = null;
        Gson gson = new Gson();
        res = gson.toJson(SportPagerVector);
        Log.i("JCFJSON", res);
        */

        String tkn = MyFirebaseInstanceIdService.getFBToken();
        if(tkn != null)
        {
            DispositivoID(tkn);
        }
    }
    public static Vector<SportPager> getSportPagerVector()
    {
        return SportPagerVector;
    }

    public static Vector<SportPager> cargarSportPagerVector(String tipo)
    {
        SportPagerVector.clear();
        base.ObtenerSportPagers(SportPagerVector, tipo);

        return SportPagerVector;
    }
    public static long insertarSportPager(JSONObject sp, String tipo)
    {
        return base.insertarSP(sp, tipo);
    }

    public static void eliminarSP(int rowId)
    {
        RestPost rp;
        String mensaje = null;
        JSONObject jsonParam = new JSONObject();

        Log.i("Aplicacion", "eliminarSP rowId= " + rowId);

        base.eliminarSP(rowId);

        try
        {
            jsonParam.put("rowId", rowId);
            mensaje = jsonParam.toString();
            rp = new RestPost();
            String ruta = URL_SERVER + "/sportpager/eliminar";
            rp.execute(ruta, mensaje);
        }
        catch (JSONException e)
        {
            e.printStackTrace();
        }
    }

/*
    public static void leerSportPagerDeLaBase(){
        SportPagerVector.clear();
        base.ObtenerSportPagers(SportPagerVector);
    }
*/
    public static boolean actualizarTipoPorId(String id, String tipo, String resultado){
        boolean ret;
        ret = base.actualizarTipoPorId(id, tipo, resultado);
        return ret;
    }

    public static void addSportPager(JSONObject jssp){
        SportPager sp = new SportPager(jssp);
        SportPagerVector.add(sp);
    }

    public static void DispositivoID(String token)
    {
        RestPost rp;
        String mensaje = null;
        JSONObject jsonParam = new JSONObject();

        Log.i("Google dice: token= ", token);

        if(token != null)
        {
            if (base.contarIDs() == 0)
            {
                dispositivoId = token;
                dispositivoIdOld = token;
                base.actualizarDispositivoIDs(dispositivoId, dispositivoIdOld);
                Log.i("Aplicacion", "0 rows, insertando por primera vez");
            }
            else
            {
                dispositivoId = base.getDeviceId();
                if (dispositivoId.equals(token) == false)
                {
                    dispositivoIdOld = dispositivoId;
                    dispositivoId = token;
                    base.borrarDispositivoIDs();
                    base.actualizarDispositivoIDs(dispositivoId, dispositivoIdOld);

                    Log.i("Aplicacion", "actualizando IDs");
                }
                else
                {
                    dispositivoId = token;
                    dispositivoIdOld = base.getDeviceIdOld();
                    Log.i("Aplicacion", "ningún ID cambió");
                }
            }

            if (token != null)
            {
                try
                {
                    jsonParam.put("firebase_id", dispositivoId);
                    jsonParam.put("firebase_id_old", dispositivoIdOld);
                    mensaje = jsonParam.toString();
                    rp = new RestPost();
                    String ruta = URL_SERVER + "/dispositivos/registro";
                    rp.execute(ruta, mensaje);
                }
                catch (JSONException e)
                {
                    e.printStackTrace();
                }
            }
        }
        else
        {
            Log.e("Aplicacion", "Error !!! token == null");
        }
    }

    public static String getDispositivoId()
    {
        return dispositivoId;
    }

    public static WebView getNav()
    {
        return nav;
    }

    public static void setNav(WebView nav)
    {
        Aplicacion.nav = nav;
    }

    public static void Navegador(String url)
    {
        nav.loadUrl(url);
    }

    public static void setActualizarRecibidos(Boolean actualizarRecibidos)
    {
        Aplicacion.actualizarRecibidos = actualizarRecibidos;
    }

    public static int getActualizarWebView()
    {
        int ret = 0;
        if(actualizarRecibidos == true){
            actualizarRecibidos = false;
            ret = 1;
        }
        return ret;
    }

    public static void setActualizarWebView(int actualizarWebView)
    {
        Aplicacion.actualizarWebView = actualizarWebView;
    }
}
