package kz.istt.locust;

import android.annotation.SuppressLint;
//import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.PendingIntent.CanceledException;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;

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

/**
 * Служба пытается отправить новые данные каждые 5 мнут на сервере, если нет данных то не отправляет.
 * Раз в день должна пытаться обновить пользователя и принять задания.
 * @author ivanov.i
 *
 */
public class MainService extends Service
{
	public final static String PARAM_ACTION = "ACTION";

	//NotificationManager m_nm; //http://startandroid.ru/ru/uroki/vse-uroki-spiskom/164-urok-99-service-uvedomlenija-notifications
	private Timer timer = new Timer();
	private Timer timerP = new Timer(); //Прогрес бар уведомлений
	
	MySynchronizationOld _syn = null;

	public PendingIntent m_pi = null; //Слушатель прогрес бара
	
	@Override
	public void onCreate()
	{
		super.onCreate();
		
		Log.e("CCALM", "Servuce id start.");
		
		//m_nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
		
		_syn = new MySynchronizationOld(this);

		timer.scheduleAtFixedRate(new TimerTask()
		{
			@SuppressLint("HandlerLeak")
			private Handler myHandle = new Handler() {
				@Override
				public void handleMessage(Message msg)
				{
					timerTic(false);
				}
			};

			@Override
			public void run() {
				myHandle.sendMessage(myHandle.obtainMessage());
			}
		},0,1000 * 60 * 5 ); //Раз в 5 минут (либо отдельно при сохранении записи)

		//Отображаем прогресс бар синхронизации в уведомлениях каждую секунду
		timerP.scheduleAtFixedRate(new TimerTask()
		{
			@Override
			public void run()
			{
				if(MainService.this.m_pi != null)
				{
					int cnt=_syn.getCount();

					Intent intent = new Intent().putExtra(SetupActivity.PARAM_RESULT, cnt);
			        try
					{
						m_pi.send(MainService.this, SetupActivity.STATUS_FINISH, intent);
					} catch (CanceledException e)
					{
						//e.printStackTrace();
						Log.e("CCALM", "Error: ", e);
					}
				}			
			}
		},0,500);
	}

	@Override
	public IBinder onBind(Intent arg0)
	{
		return null;
	}

	//Для приёма данных из приложения в сервис
	public int onStartCommand(Intent intent, int flags, int startId)
	{
		if(intent!=null)
		{
			String act=intent.getStringExtra(MainService.PARAM_ACTION);
			if(act!=null)
			{
				if(act.equals("1"))
				{
					timerTic(true);
				}else
				if(act.equals("2")) //Присвоили слушателя прогресс бара
				{
					m_pi = intent.getParcelableExtra(SetupActivity.PARAM_PINTENT);	
				}else
				if(act.equals("3")) //Очистить слушателя прогрес бара
				{
					m_pi = null;
				}
			}
		}
		return super.onStartCommand(intent, flags, startId);
	}

	private void timerTic(boolean bAll)
	{
		Log.e("CCALM", "Start synhronization");
		_syn.Synch();
	}
}
