package com.mobilyzer.gcm;


import com.google.android.gms.gcm.GoogleCloudMessaging;
import com.mobilyzer.UpdateIntent;
import com.mobilyzer.util.Logger;

import android.app.IntentService;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;


/**
 * This {@code IntentService} does the actual handling of the GCM message.
 * {@code GcmBroadcastReceiver} (a {@code WakefulBroadcastReceiver}) holds a partial wake lock for
 * this service while the service does its work. When the service is finished, it calls
 * {@code completeWakefulIntent()} to release the wake lock.
 */
public class GcmIntentService extends IntentService {
  public static final int NOTIFICATION_ID = 1;
  NotificationCompat.Builder builder;

  public GcmIntentService() {
    super("GcmIntentService");
  }


  @Override
  protected void onHandleIntent(Intent intent) {
    Bundle extras = intent.getExtras();
    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
    // The getMessageType() intent parameter must be the intent you received
    // in your BroadcastReceiver.
    String messageType = gcm.getMessageType(intent);

    if (!extras.isEmpty()) { // has effect of unparcelling Bundle
      /*
       * Filter messages based on message type. Since it is likely that GCM will be extended in the
       * future with new message types, just ignore any message types you're not interested in, or
       * that you don't recognize.
       */
      if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {
        Logger.d("GCMManager -> GcmIntentService -> MESSAGE_TYPE_SEND_ERROR");
      } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) {
        Logger.d("GCMManager -> GcmIntentService -> MESSAGE_TYPE_DELETED");
      } else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) {
        Logger.d("GCMManager -> MESSAGE_TYPE_MESSAGE -> " + extras.toString());
        if (extras.containsKey("task")) {
          Logger.d("GCMManager -> " + extras.getString("task"));
          
          Intent newintent = new Intent();
          newintent.setAction(UpdateIntent.GCM_MEASUREMENT_ACTION);
          newintent.putExtra(UpdateIntent.MEASUREMENT_TASK_PAYLOAD, extras.getString("task"));
          sendBroadcast(newintent);

        }
      }
    }
    // Release the wake lock provided by the WakefulBroadcastReceiver.
    GcmBroadcastReceiver.completeWakefulIntent(intent);
  }

  // // Put the message into a notification and post it.
  // // This is just one simple example of what you might choose to do with
  // // a GCM message.
  // private void sendNotification(String msg) {
  // mNotificationManager = (NotificationManager)
  // this.getSystemService(Context.NOTIFICATION_SERVICE);
  //
  // PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
  // new Intent(this, MainActivity.class), 0);
  //
  // NotificationCompat.Builder mBuilder =
  // new NotificationCompat.Builder(this)
  // .setSmallIcon(R.drawable.ic_stat_gcm)
  // .setContentTitle("GCM Notification")
  // .setStyle(new NotificationCompat.BigTextStyle()
  // .bigText(msg))
  // .setContentText(msg);
  //
  // mBuilder.setContentIntent(contentIntent);
  // mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
  // }
}