package com.premnirmal.Magnet.app;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import com.premnirmal.Magnet.IconCallback;
import com.premnirmal.Magnet.Magnet;

/**
 * Created by prem on 7/20/14.
 * Desc: Example on how to use {@link com.premnirmal.Magnet.Magnet} in a service
 */
public class MyService extends Service {

  private ServiceBinder serviceBinder;

  @Override public IBinder onBind(Intent intent) {
    if (serviceBinder == null) {
      serviceBinder = new ServiceBinder(this);
    }
    return serviceBinder;
  }

  @Override public void onDestroy() {
    serviceBinder.destroy();
    serviceBinder = null;
    super.onDestroy();
  }

  interface IconService {
    void startMagnet();

    void stopMagnet();
  }

  private static class ServiceBinder extends Binder implements IconCallback, IconService {

    private static final String TAG = "Magnet";
    private Magnet magnet;
    private final Context context;

    ServiceBinder(Context context) {
      this.context = context;
    }

    void destroy() {
      if (magnet != null) {
        magnet.destroy();
      }
    }

    @Override public void startMagnet() {
      final ImageView iconView = new ImageView(context);
      iconView.setImageResource(R.drawable.ic_launcher);
      if (magnet == null) {
        magnet = Magnet.newBuilder(context)
            .setIconView(iconView)
            .setIconCallback(this)
            .setHideFactor(0.2f)
            .setShouldShowRemoveView(true)
            .setRemoveIconResId(R.drawable.ic_close)
            .setRemoveIconShadow(R.drawable.bottom_shadow)
            .setShouldStickToWall(true)
            .setRemoveIconShouldBeResponsive(true)
            .setInitialPosition(100, 200)
            .build();
        magnet.show();
        iconView.postDelayed(new Runnable() {
          @Override public void run() {
            if (magnet != null) {
              magnet.setPosition(500, 800);
              iconView.postDelayed(new Runnable() {
                @Override public void run() {
                  magnet.goToWall();
                }
              }, 500);
            }
          }
        }, 1000);
      }
    }

    @Override public void stopMagnet() {
      if (magnet != null) {
        magnet.destroy();
        magnet = null;
      }
    }

    @Override public void onFlingAway() {
      Log.i(TAG, "onFlingAway");
      if (magnet != null) {
        magnet.destroy();
        magnet = null;
      }
    }

    @Override public void onMove(float x, float y) {
      Log.i(TAG, "onMove(" + x + "," + y + ")");
    }

    @Override public void onIconClick(View icon, float iconXPose, float iconYPose) {
      Log.i(TAG, "onIconClick(..)");
      Toast.makeText(context, R.string.click, Toast.LENGTH_SHORT).show();
    }

    @Override public void onIconDestroyed() {
      Log.i(TAG, "onIconDestroyed()");
    }
  }
}