package com.reindeercrafts.notificationpeek.dialogs;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.DialogFragment;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;

import com.reindeercrafts.notificationpeek.R;

/**
 * Created by zhelu on 5/12/14.
 */
public class DialogHelper {

    public static final String ABOUT_DIALOG_TAG = "NotificationPeekPort.AboutDialog";

    public static void showAboutDialog(Activity activity) {
        FragmentManager fm = activity.getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();

        ((DialogFragment) Fragment
                .instantiate(activity, AboutDialogFragment.class.getName()))
                .show(ft, ABOUT_DIALOG_TAG);
    }

    public static void showHelpDialog(Activity activity) {
        FragmentManager fm = activity.getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();

        ((DialogFragment) Fragment
                .instantiate(activity, HelpDialogFragment.class.getName()))
                .show(ft, ABOUT_DIALOG_TAG);
    }


    public static class Builder {

        private static final String VERSION_UNAVAILABLE = "N/A";
        protected final Context mContext;

        private Drawable mIcon;

        public Builder(Context context) {
            mContext = context;
            mIcon = context.getResources().getDrawable(R.drawable.ic_launcher);
        }

        private CharSequence getVersionTitle() {
            PackageManager pm = mContext.getPackageManager();
            String packageName = mContext.getPackageName();
            String versionName;
            try {
                PackageInfo info = pm.getPackageInfo(packageName, 0);
                versionName = info.versionName;
            } catch (PackageManager.NameNotFoundException e) {
                versionName = VERSION_UNAVAILABLE;
            }

            Resources res = mContext.getResources();
            return Html.fromHtml(
                    res.getString(R.string.about_title, res.getString(R.string.app_name),
                            versionName));
        }

        private CharSequence getAboutMessage() {
            return Html.fromHtml(mContext.getResources().getString(R.string.about_message));
        }

        private CharSequence getHelpTitle() {
            return mContext.getString(R.string.help);
        }

        private CharSequence getHelpMessage() {
            return Html.fromHtml(mContext.getString(R.string.help_msg));
        }

        private View create(CharSequence title, CharSequence message) {
            LayoutInflater inflater = LayoutInflater.from(mContext);

            View root = inflater.inflate(R.layout.about_dialog, null);

            // Title.
            TextView titleView = (TextView) root.findViewById(R.id.dialog_title_text);

            Drawable left = (mContext.getResources().getConfiguration().screenLayout &
                    Configuration.SCREENLAYOUT_SIZE_MASK) !=
                    Configuration.SCREENLAYOUT_SIZE_LARGE ? mIcon : null;
            Drawable top = left == null ? mIcon : null;

            titleView.setText(title);
            titleView.setCompoundDrawablePadding(mContext.getResources().getDimensionPixelSize(R.dimen.item_padding));
            titleView.setCompoundDrawablesWithIntrinsicBounds(left, top, null, null);

            // About message.
            TextView messageView = (TextView) root.findViewById(R.id.dialog_message_text);
            messageView.setText(message);
            messageView.setMovementMethod(LinkMovementMethod.getInstance());


            return root;
        }


        /**
         * Create About Dialog as a default {@link AlertDialog.Builder} with custom view.
         */
        public AlertDialog.Builder createAboutDialog() {
            return new AlertDialog.Builder(mContext)
                    .setView(create(getVersionTitle(), getAboutMessage()));
        }

        /**
         * Create Help Dialog as a default {@link AlertDialog.Builder} with custom view.
         */
        public AlertDialog.Builder createHelpDialog() {
            return new AlertDialog.Builder(mContext)
                    .setView(create(getHelpTitle(), getHelpMessage()));
        }

    }

}