package com.dialog;

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.ScreenUtil;
import com.popup.tool.R;

/**
 * 简单的带有输入框的对话框
 *
 * Created by huangjun on 2015/5/28.股灾
 */
public class EasyEditDialog extends Dialog {

	private TextView mTitleTextView;

	private TextView mMessageTextView;

	private EditText mEdit;

	private TextView mLengthTextView;

	private Button mPositiveBtn;

	private Button mNegativeBtn;

	private int mResourceId;

	private View.OnClickListener mPositiveBtnListener;

	private View.OnClickListener mNegativeBtnListener;

	private String mTitle;

	private int mPositiveBtnStrResId = R.string.ok;

	private int mNegativeBtnStrResId = R.string.cancel;

	private String mMessage;

	private String mEditHint;

	private int mMaxEditTextLength;

	private int mMaxLines = 0;

	private boolean mSingleLine = false;

	private boolean mShowEditTextLength = false;

	private int inputType = -1;

	public EasyEditDialog(Context context, int resourceId, int style) {
		super(context, style);
		mMaxEditTextLength = 16;
		if (-1 != resourceId) {
			setContentView(resourceId);
			this.mResourceId = resourceId;
		}
		LayoutParams Params = getWindow().getAttributes();
		Params.width = LayoutParams.MATCH_PARENT;
		Params.height = LayoutParams.MATCH_PARENT;
		getWindow().setAttributes(Params);
	}

	public EasyEditDialog(Context context, int style) {
		this(context, -1, style);
		mResourceId = R.layout.nim_easy_alert_dialog_with_edit_text;
	}

	public EasyEditDialog(Context context) {
		this(context, R.style.sdk_share_dialog);
		mResourceId = R.layout.nim_easy_alert_dialog_with_edit_text;
	}

	public void setTitle(String title) {
		if (null != title) {
			this.mTitle = title;
			if (null != mTitleTextView)
				mTitleTextView.setText(title);
		}
	}

	public void setMessage(String message) {
		if (null != message) {
			this.mMessage = message;
			if (null != mMessageTextView)
				mMessageTextView.setText(message);
		}
	}

	public void setEditHint(String hint) {
		if (!TextUtils.isEmpty(hint)) {
			this.mEditHint = hint;
			if (null != mEdit) {
				mEdit.setHint(hint);
			}
		}
	}

	public void setInputType(int type) {
		this.inputType = type;
	}

	public void setEditTextMaxLength(int maxLength) {
		this.mMaxEditTextLength = maxLength;
		this.mShowEditTextLength = true;
	}

	public void setEditTextMaxLines(int maxLines) {
		this.mMaxLines = maxLines;
	}

	public void setEditTextSingleLine() {
		this.mSingleLine = true;
	}

	public void addPositiveButtonListener(View.OnClickListener positiveBtnListener) {
		this.mPositiveBtnListener = positiveBtnListener;
	}

	public void addPositiveButtonListener(int resId, View.OnClickListener positiveBtnListener) {
		this.mPositiveBtnStrResId = resId;
		this.mPositiveBtnListener = positiveBtnListener;
	}

	public void addNegativeButtonListener(View.OnClickListener negativeBtnListener) {
		this.mNegativeBtnListener = negativeBtnListener;
	}

	public void addNegativeButtonListener(int resId, View.OnClickListener negativeBtnListener) {
		this.mNegativeBtnStrResId = resId;
		this.mNegativeBtnListener = negativeBtnListener;
	}

	public int getResourceId() {
		return mResourceId;
	}

	public void setResourceId(int resourceId) {
		this.mResourceId = resourceId;
	}

	public Button getPositiveBtn() {
		return mPositiveBtn;
	}

	public Button getNegativeBtn() {
		return mNegativeBtn;
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(mResourceId);

		try {
			LinearLayout root = (LinearLayout) findViewById(R.id.easy_edit_dialog_root);
			ViewGroup.LayoutParams params = root.getLayoutParams();
			params.width = (int) ScreenUtil.getDialogWidth();
			root.setLayoutParams(params);

			if (mTitle != null) {
				mTitleTextView = (TextView) findViewById(R.id.easy_dialog_title_text_view);
				mTitleTextView.setText(mTitle);
			}

			if (mMessage != null) {
				mMessageTextView = (TextView) findViewById(R.id.easy_dialog_message_text_view);
				mMessageTextView.setText(mMessage);
				mMessageTextView.setVisibility(View.VISIBLE);
			}

			mEdit = (EditText) findViewById(R.id.easy_alert_dialog_edit_text);
			mLengthTextView = (TextView) findViewById(R.id.edit_text_length);
			// mEdit.setFilters(new InputFilter[] { new InputFilter.LengthFilter(mMaxEditTextLength) });
			mLengthTextView.setVisibility(mShowEditTextLength ? View.VISIBLE : View.GONE);
			if (inputType != -1) {
				mEdit.setInputType(inputType);
			}
			mEdit.addTextChangedListener(new EditTextWatcher(mEdit, mLengthTextView, mMaxEditTextLength,
					mShowEditTextLength));

			if (!TextUtils.isEmpty(mEditHint)) {
				mEdit.setHint(mEditHint);
			}
			if (mMaxLines > 0) {
				mEdit.setMaxLines(mMaxLines);
			}
			if (mSingleLine) {
				mEdit.setSingleLine();
			}

			mPositiveBtn = (Button) findViewById(R.id.easy_dialog_positive_btn);
			if (mPositiveBtnStrResId != 0) {
				mPositiveBtn.setText(mPositiveBtnStrResId);
			}
			mPositiveBtn.setOnClickListener(mPositiveBtnListener);

			mNegativeBtn = (Button) findViewById(R.id.easy_dialog_negative_btn);
			if (mNegativeBtnStrResId != 0) {
				mNegativeBtn.setText(mNegativeBtnStrResId);
			}
			mNegativeBtn.setOnClickListener(mNegativeBtnListener);
			mNegativeBtn.setVisibility(View.VISIBLE);
			findViewById(R.id.easy_dialog_btn_divide_view).setVisibility(View.VISIBLE);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public String getEditMessage() {
		if (mEdit != null)
			return mEdit.getEditableText().toString();
		else return null;
	}

	public static class EditTextWatcher implements TextWatcher {

		private EditText editText;

		private TextView lengthTV;

		private int maxLength;

		private boolean show = false;

		public EditTextWatcher(EditText editText, TextView lengthTV, int maxLength, boolean show) {
			this.maxLength = maxLength;
			this.editText = editText;
			this.lengthTV = lengthTV;
			this.show = show;
		}

		@Override
		public void beforeTextChanged(CharSequence s, int start, int count, int after) {

		}

		@Override
		public void onTextChanged(CharSequence s, int start, int before, int count) {

		}

		@Override
		public void afterTextChanged(Editable s) {
			if (editText == null)
				return;
			int editStart = editText.getSelectionStart();
			int editEnd = editText.getSelectionEnd();
			editText.removeTextChangedListener(this);
			while (StringUtil.counterChars(s.toString()) > maxLength) {
				s.delete(editStart - 1, editEnd);
				editStart--;
				editEnd--;
			}
			editText.setSelection(editStart);
			editText.addTextChangedListener(this);
			if (show && lengthTV != null) {
				long remainLength = maxLength - StringUtil.counterChars(s.toString());
				lengthTV.setText("" + remainLength / 2);
				lengthTV.setVisibility(View.VISIBLE);
			}
		}
	}
}
