package com.example.nuria.fesp_cyl;

import android.app.IntentService;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;

import com.example.nuria.fesp_cyl.DataBase.DbHelper;
import com.example.nuria.fesp_cyl.DataBase.StatusContract;
import com.example.nuria.fesp_cyl.RssParserPull;
import java.util.List;

public class RefreshService extends IntentService {

    static final String TAG = "RefreshService";

    static final int DELAY = 30000; // medio minuto
    private boolean runFlag = false;
    private RssParserPull rss ;
    private String actualurl = "http://castillayleon.fespugt.es/sectores/ensenanza/e-publica?format=feed&type=rss";
    String nuevoUrl ;
    Cursor c;


    public RefreshService() {
        super(TAG);
    }

    @Override
    public void onCreate() {

        super.onCreate();
        nuevoUrl=actualurl;
        rss = new RssParserPull();
        Log.d(TAG, "onCreated");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        Log.d(TAG, "onStarted");
        this.runFlag = true;

        while (runFlag) {
            Log.d(TAG, "Updater running");

            try {
                try {
                    if (actualurl!=nuevoUrl){
                        if(rss != null)
                            rss.onDestroy();
                        actualurl = nuevoUrl;
                        rss.RssParserPullSetURL(nuevoUrl);

                    }else{

                        rss.RssParserPullSetURL(actualurl);
                    }
                    List<Noticia> feed  =  rss.parse();
                    // Iteramos sobre todos los componentes de feed
                    ContentValues values = new ContentValues();
                    // Imprimimos las actualizaciones en el log
                    for (Noticia noticia : feed) {
                       /* Log.d(TAG, String.format("%s: %s: %s: %s", noticia.getTitulo().toString(),
                                noticia.getLink().toString(),noticia.getDescripcion().toString(),noticia.getFecha().toString()));*/
                        // Insertar en la base de datos

                        c = getContentResolver().query(StatusContract.CONTENT_URI,new String[]{StatusContract.Column.ID, StatusContract.Column.URL},StatusContract.Column.URL + " like ? " , new String[]{noticia.getLink().toString()},null);

                        if (c.getCount() == 0) {

                            values.clear();
                            values.put(StatusContract.Column.ID, noticia.getId());
                            values.put(StatusContract.Column.TITULO, noticia.getTitulo().toString());
                            values.put(StatusContract.Column.DESCRIPCION, noticia.getDescripcion().toString());
                            values.put(StatusContract.Column.URL, noticia.getLink().toString());
                            values.put(StatusContract.Column.FECHA, noticia.getFecha().toString());
                            values.put(StatusContract.Column.CATEGORIA, noticia.getCategoria().toString());

                            getContentResolver().insert(StatusContract.CONTENT_URI, values);


                            if (feed.size() > 0) {
                                Intent bIntent = new Intent("updateList");
                                LocalBroadcastManager.getInstance(this).sendBroadcast(bIntent);

                                Bundle bundle = new Bundle();
                                bundle.putString("count", String.valueOf(feed.size()));

                                Intent cIntent = new Intent("com.example.nuria.fesp_cyl.action.NEW_STATUSES");
                                cIntent.putExtras(bundle);
                                sendBroadcast(cIntent);
                            }
                       }
                    }
                }catch (Exception e) {
                    Log.e(TAG, "Failed to fetch the feed", e);
                }
                Log.d(TAG, "Updater ran");
                Thread.sleep(DELAY);
            }
            catch (InterruptedException e) {
                runFlag = false;
            }
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        this.runFlag = false;
        Log.d(TAG, "onDestroyed");
    }
}
