package net.simonvt.menudrawer.compat;

import java.lang.reflect.Method;

import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.util.Log;

public final class ActionBarHelper {

    private static final String TAG = "ActionBarHelper";

    static final boolean DEBUG = false;

    private Activity mActivity;

    private Object mIndicatorInfo;

    private boolean mUsesCompat;

    public ActionBarHelper(Activity activity) {
        mActivity = activity;

        try {
            Class clazz = activity.getClass();
            Method m = clazz.getMethod("getSupportActionBar");
            mUsesCompat = true;
        } catch (NoSuchMethodException e) {
            if (DEBUG) {
                Log.e(TAG,
                        "Activity " + activity.getClass().getSimpleName() + " does not use a compatibility action bar",
                        e);
            }
        }

        mIndicatorInfo = getIndicatorInfo();
    }

    private Object getIndicatorInfo() {
        if (mUsesCompat && Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            return ActionBarHelperCompat.getIndicatorInfo(mActivity);
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            return ActionBarHelperNative.getIndicatorInfo(mActivity);
        }

        return null;
    }

    public void setActionBarUpIndicator(Drawable drawable, int contentDesc) {
        if (mUsesCompat && Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            ActionBarHelperCompat.setActionBarUpIndicator(mIndicatorInfo, mActivity, drawable, contentDesc);
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            ActionBarHelperNative.setActionBarUpIndicator(mIndicatorInfo, mActivity, drawable, contentDesc);
        }
    }

    public void setActionBarDescription(int contentDesc) {
        if (mUsesCompat && Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            ActionBarHelperCompat.setActionBarDescription(mIndicatorInfo, mActivity, contentDesc);
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            ActionBarHelperNative.setActionBarDescription(mIndicatorInfo, mActivity, contentDesc);
        }
    }

    public Drawable getThemeUpIndicator() {
        if (mUsesCompat && Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            return ActionBarHelperCompat.getThemeUpIndicator(mIndicatorInfo);
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            return ActionBarHelperNative.getThemeUpIndicator(mIndicatorInfo, mActivity);
        }

        return null;
    }

    public void setDisplayShowHomeAsUpEnabled(boolean enabled) {
        if (mUsesCompat && Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            ActionBarHelperCompat.setDisplayHomeAsUpEnabled(mIndicatorInfo, enabled);
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            ActionBarHelperNative.setDisplayHomeAsUpEnabled(mActivity, enabled);
        }
    }
}
