package org.goodev.discourse.widget;

import android.content.Context;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnLongClickListener;
import android.widget.ImageButton;
import android.widget.Toast;

/**
 * https://gist.github.com/scruffyfox/3894926 <br>
 * Extended image view to show the content description in a Toast view when the user long presses. Note: `android:contentDescription` must
 * be set in order for the toast to work
 *
 * @author Callum Taylor <http://callumtaylor.net>
 */
public class HintedImageBtn extends ImageButton implements OnLongClickListener {
    private final Context mContext;
    private OnLongClickListener mOnLongClickListener;

    public HintedImageBtn(Context context) {
        super(context);
        mContext = context;

        setOnLongClickListener(this);
    }

    public HintedImageBtn(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;

        setOnLongClickListener(this);
    }

    @Override
    public void setOnLongClickListener(OnLongClickListener l) {
        if (l == this) {
            super.setOnLongClickListener(l);
            return;
        }

        mOnLongClickListener = l;
    }

    @Override
    public boolean onLongClick(View v) {
        if (mOnLongClickListener != null) {
            if (!mOnLongClickListener.onLongClick(v)) {
                handleLongClick();
                return true;
            }
        } else {
            handleLongClick();
            return true;
        }

        return false;
    }

    private void handleLongClick() {
        String contentDesc = getContentDescription().toString();
        if (!TextUtils.isEmpty(contentDesc)) {
            int[] pos = new int[2];
            getLocationInWindow(pos);

            Toast t = Toast.makeText(mContext, contentDesc, Toast.LENGTH_SHORT);
            t.setGravity(Gravity.TOP | Gravity.LEFT, pos[0] - ((contentDesc.length() / 2) * 12), pos[1] - 128);
            t.show();
        }
    }
}