package com.bourke.glimmr.appwidget;

import com.bourke.glimmr.BuildConfig;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;
import android.widget.RemoteViews;

import com.bourke.glimmr.R;
import com.bourke.glimmr.activities.PhotoViewerActivity;
import com.bourke.glimmr.common.Constants;

public class StackWidgetProvider extends AppWidgetProvider {

    private static final String TAG = "Glimmr/StackWidgetProvider";

    private static final String ACTION_START_VIEWER =
        "com.bourke.glimmr.appwidget.StackWidgetProvider.ACTION_START_VIEWER";
    private static final String ACTION_REFRESH =
        "com.bourke.glimmr.appwidget.StackWidgetProvider.ACTION_REFRESH";
    public static final String VIEW_INDEX =
        "com.bourke.glimmr.appwidget.StackWidgetProvider.VIEW_INDEX";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (BuildConfig.DEBUG) Log.d(TAG, "onReceive");

        AppWidgetManager mgr = AppWidgetManager.getInstance(context);

        if (intent.getAction().equals(ACTION_START_VIEWER)) {
            //int appWidgetId = intent.getIntExtra(
            //        AppWidgetManager.EXTRA_APPWIDGET_ID,
            //        AppWidgetManager.INVALID_APPWIDGET_ID);
            int viewIndex = intent.getIntExtra(VIEW_INDEX, 0);
            String photoListFile = intent.getStringExtra(
                    PhotoViewerActivity.KEY_PHOTO_LIST_FILE);
            Intent photoViewer = new Intent(context,
                    PhotoViewerActivity.class);
            photoViewer.putExtra(
                    PhotoViewerActivity.KEY_START_INDEX,
                    viewIndex);
            photoViewer.setAction(PhotoViewerActivity.ACTION_VIEW_PHOTOLIST);
            photoViewer.putExtra(PhotoViewerActivity.KEY_PHOTO_LIST_FILE,
                    photoListFile);
            photoViewer.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            photoViewer.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
            context.startActivity(photoViewer);
        } else if (intent.getAction().equals(ACTION_REFRESH)) {
            if (BuildConfig.DEBUG) Log.d(TAG, "got action_refresh");
            int appWidgetId = intent.getIntExtra(
                    AppWidgetManager.EXTRA_APPWIDGET_ID,
                    AppWidgetManager.INVALID_APPWIDGET_ID);
            mgr.notifyAppWidgetViewDataChanged(appWidgetId, R.id.stack_view);
        }
        super.onReceive(context, intent);
    }

    /**
     * Called when first added or as requested by updatePeriodMillis
     *
     * appWidgetIds refers to each instance of the widget added to the
     * homescreen
     */
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        if (BuildConfig.DEBUG) Log.d(TAG, "onUpdate: " + appWidgetIds.length);

        for (int appWidgetId : appWidgetIds) {
            /* Intent for creating the collection's views */
            Intent intent = new Intent(context, StackWidgetService.class);
            intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                    appWidgetId);
            intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
            RemoteViews rv = new RemoteViews(context.getPackageName(),
                    R.layout.stackview_widget_layout);
            rv.setEmptyView(R.id.stack_view, R.id.empty_view);

            rv.setRemoteAdapter(R.id.stack_view, intent);

            /* Intent for clicking on an item */
            Intent photoViewerIntent = new Intent(context,
                    StackWidgetProvider.class);
            photoViewerIntent.setAction(
                    StackWidgetProvider.ACTION_START_VIEWER);
            photoViewerIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                    appWidgetId);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(
                    context, 0, photoViewerIntent,
                    PendingIntent.FLAG_UPDATE_CURRENT);
            rv.setPendingIntentTemplate(R.id.stack_view, pendingIntent);

            /* Intent for clicking on the empty view to refresh */
            Intent refreshIntent = new Intent(context,
                    StackWidgetProvider.class);
            refreshIntent.setAction(ACTION_REFRESH);
            refreshIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                    appWidgetId);
            PendingIntent pendingIntent2 = PendingIntent.getBroadcast(
                    context, 0, refreshIntent,
                    PendingIntent.FLAG_UPDATE_CURRENT);
            rv.setOnClickPendingIntent(R.id.empty_view, pendingIntent2);

            appWidgetManager.updateAppWidget(appWidgetId, rv);
        }
        super.onUpdate(context, appWidgetManager, appWidgetIds);
    }
}