package org.arkiwi.app.rss;

import org.arkiwi.app.R;
import org.arkiwi.app.activity.ATab;
import org.arkiwi.app.activity.Viewer;
import org.arkiwi.app.interfaces.RssInterface;
import org.arkiwi.app.interfaces.SDialogInterface;
import org.arkiwi.app.utility.SDialog;
import org.arkiwi.app.utility.SNetwork;

import android.app.Activity;
import android.content.res.Resources;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;

public class RssQueryTask extends AsyncTask<String, Void, String> implements RssInterface, SDialogInterface {
	private static final String LOG_TAG = "RssQueryTask";
	private static Activity caller;
	private static String callerName;
	private static RssDoc rssDocs;
	
	public RssQueryTask(Activity a, String name) {
		super();
		
		rssDocs = RssDoc.getInstance(ATab.max_cache);
		caller = a;
		callerName = name;
	}
	
	@Override
	protected String doInBackground(String... uri) {
		//inserito in questo momento xkè altrimenti non c'è più modo di avere
		//questa informazione nel metodo onPostExecute
		Log.d(LOG_TAG, "uri:"+uri[0]);
		rssDocs.addKeyCacheOrder(uri[0]);
		
		return SNetwork.doGet(uri[0]);
	}
	
	@Override
	protected void onPreExecute() {
		SDialog.spinnerDialog(caller, R.string.diag_spinner_http_title, R.string.diag_spinner_http_msg);
	} 
	
	@Override
	protected void onPostExecute(String result) {
		int toastLength = Toast.LENGTH_LONG;
		Log.i(LOG_TAG,"onPostExec()");
		String msg = "";
		Resources res = caller.getResources();
		if (result.equalsIgnoreCase(HTTP_S_CONN_REFUSED)) {
			msg = HTTP_S_CONN_REFUSED;
		} else if(result.equalsIgnoreCase(HTTP_S_TIMED_OUT)){
			msg = HTTP_S_TIMED_OUT;
		} else if(result.equalsIgnoreCase(HTTP_S_NET_ERR)){
			msg = HTTP_S_NET_ERR;
		}else {
			toastLength = Toast.LENGTH_SHORT;
			//Log.i(LOG_TAG,"onPostExec()"+result);
			int n = rssDocs.setRss(result,false);
			if(n == XML_PAGLIAIO_DOWN){
				msg = res.getString(R.string.toast_pagliaio_down);
			} else {
				/* Getione messaggio di operazione conclusa.
				   Se 0 o N>1 uso il messaggio per tanti, se 1
				   quello singolo.
				 */ 
				String str=res.getString(R.string.toast_n_res_mult);
				if(n == 1){
					str=res.getString(R.string.toast_n_res_singl);
				}				
				msg = n + " " +str;
				
				//Se ho ottenuto risultati dalla ricerca gestisco il dafarsi
				if (n > 0){
					rssDocs.rotateCache(result);
					if(callerName.equalsIgnoreCase("view"))
						Viewer.fillGrid(caller.getApplicationContext());
					
					ATab.tabHost.setCurrentTab(1);
				}
			}
		}
		
		SDialog.dismissDialog();
		Toast.makeText(caller.getApplicationContext(), msg, toastLength).show();
	}
}
