package kz.arta.synergy.workflow.mobile.android.common.components;

import android.app.Activity;
import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;

import com.devspark.appmsg.AppMsg;

import kz.arta.synergy.workflow.mobile.android.R;
import kz.arta.synergy.workflow.mobile.android.common.utils.Fonts;
import kz.arta.synergy.workflow.mobile.android.common.utils.Utils;

/**
 * Created by neox on 24.11.15.
 * Компонент ввода текста в экране авторизации
 */
public class AuthorizationEditText extends RelativeLayout {

    /**
     * Отступ справа
     */
    private static final int MARGIN_RIGHT_EDIT_TEXT = 30;

    /**
     * Размер текста внутри компонента
     */
    private static final float TEXT_SIZE = 18;

    /**
     * Отступы у иконки внутри компонента
     */
    private static final int MARGINS = 3;

    /**
     * Поле для ввода текста
     */
    private EditText editText;

    /**
     * Иконка крестика
     */
    private ImageView icon;

    /**
     * Контекст
     */
    private Context context;

    public AuthorizationEditText(Context context) {
        this(context, null);
    }

    public AuthorizationEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
        init();
    }

    /**
     * Инициализация компонентов
     */
    private void init() {

        // фон компонента
        setBackgroundResource(R.drawable.auth_edit_background);

        // параметры для компонента ввода текста
        LayoutParams editTextParams = new LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        editTextParams.setMargins(0, 0, Utils.dpToPx(MARGIN_RIGHT_EDIT_TEXT, (Activity) context), 0);
        editTextParams.addRule(RelativeLayout.CENTER_VERTICAL);

        // параметры для иконки
        LayoutParams iconParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        iconParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        iconParams.addRule(RelativeLayout.CENTER_VERTICAL);
        iconParams.setMargins(MARGINS, MARGINS, MARGINS, MARGINS);

        // компонент для ввода текста
        editText = new EditText(getContext());
        editText.setTypeface(Fonts.getRoman(getContext()));
        editText.setTextColor(getContext().getResources().getColor(R.color.authorization_edit_text_color));
        editText.setTextSize(TypedValue.COMPLEX_UNIT_SP, TEXT_SIZE);
        editText.setLayoutParams(editTextParams);
        editText.setSingleLine(true);
        editText.setBackgroundResource(0);
        editText.addTextChangedListener(new TextWatcher() {

            @Override
            public void afterTextChanged(Editable editable) {
                AppMsg.cancelAll();
                setNormalBackground();
                if (icon == null) {
                    return;
                }
                if (editable.toString().isEmpty()) {
                    icon.setVisibility(View.GONE);
                } else {
                    icon.setVisibility(View.VISIBLE);
                }
            }

            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }

        });

        // иконка, при нажатии на которую компонент очищается
        icon = new ImageView(getContext());
        icon.setImageResource(R.drawable.icon_clear_text);
        icon.setLayoutParams(iconParams);
        icon.setVisibility(GONE);
        icon.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                icon.setVisibility(View.GONE);
                editText.requestFocus();
                editText.setText("");
                InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
            }
        });

        addView(editText);
        addView(icon);
    }

    public void disableIcon() {
        icon = null;
    }

    public EditText getEditText() {
        return editText;
    }

    /**
     * Метод используется для изменения цвета фона компонента на красный (ошибка)
     */
    public void setErrorBackground() {
        setBackgroundResource(R.drawable.auth_edit_background_error);
    }

    /**
     * Метод используется для изменения цвета фона на обычный
     */
    public void setNormalBackground() {
        setBackgroundResource(R.drawable.auth_edit_background);
    }

    /**
     * Метод возвращает текст в компоненте
     *
     * @return текст
     */
    public Editable getText() {
        return editText.getText();
    }

    /**
     * Метод устанавливает текст в компонент
     *
     * @param text текст
     */
    public void setText(String text) {
        editText.setText(text);
    }

}
