package org.sunger.net.ui.activity;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.TextInputLayout;
import android.text.Editable;
import android.view.View;

import com.dd.processbutton.iml.ActionProcessButton;

import org.sunger.net.presenter.LoginPresenter;
import org.sunger.net.presenter.impl.LoginPresenterImpl;
import org.sunger.net.utils.FormValidation;
import org.sunger.net.utils.KeyboardUtils;
import org.sunger.net.utils.WidgetUtils;
import org.sunger.net.view.LoginView;

import sunger.org.demo.R;

/**
 * Created by sunger on 2015/11/17.
 */
public class LoginActivity extends BaseCompatActivity implements LoginView, View.OnClickListener {
    private LoginPresenter mPresenter;
    private ActionProcessButton mButtonSign;
    private TextInputLayout mTextInputLayoutPhone;
    private TextInputLayout mTextInputLayoutPassword;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        setStateBarColor(R.color.colorPrimaryDark);
        setUpCommonBackTooblBar(R.id.tool_bar, R.string.title_login);
        mButtonSign = (ActionProcessButton) findViewById(R.id.button_sign);
        mButtonSign.setOnClickListener(this);
        mTextInputLayoutPhone = findView(R.id.textInputLayout_phone);
        mTextInputLayoutPhone.getEditText().addTextChangedListener(new org.sunger.net.ui.widget.TextWatcher(mTextInputLayoutPhone) {
            @Override
            public void afterTextChanged(Editable s) {
                if (getEditString().length() > 10)
                    if (FormValidation.isMobile(getEditString())) {
                        mTextInputLayoutPhone.setErrorEnabled(false);
                    } else {
                        setEditTextError(mTextInputLayoutPhone, R.string.msg_error_phone);
                    }
            }
        });
        mTextInputLayoutPassword = findView(R.id.textInputLayout_password);
        mTextInputLayoutPassword.getEditText().addTextChangedListener(new org.sunger.net.ui.widget.TextWatcher(mTextInputLayoutPassword) {
            @Override
            public void afterTextChanged(Editable s) {
                if (getEditString().length() > 5)
                    if (FormValidation.isSimplePassword(getEditString())) {
                        mTextInputLayoutPassword.setErrorEnabled(false);
                    } else {
                        setEditTextError(mTextInputLayoutPassword, R.string.msg_error_password);
                    }
            }
        });
        findViewById(R.id.textView_create_account).setOnClickListener(this);
        findView(R.id.textView_reset_password).setOnClickListener(this);
        mPresenter = new LoginPresenterImpl(this);
    }


    private void setEditTextError(TextInputLayout layout, int msgId) {
        layout.setErrorEnabled(true);
        layout.setError(getString(msgId));
    }

    public boolean valid(String phone, String password) {
        if (!FormValidation.isMobile(phone)) {
            WidgetUtils.requestFocus(mTextInputLayoutPhone.getEditText());
            setEditTextError(mTextInputLayoutPhone, R.string.msg_error_phone);
            return true;
        }
        if (!FormValidation.isSimplePassword(password)) {
            WidgetUtils.requestFocus(mTextInputLayoutPassword.getEditText());
            setEditTextError(mTextInputLayoutPassword, R.string.msg_error_password);
            return true;
        }
        return false;
    }


    public void login() {
        KeyboardUtils.hide(this);
        String phone = mTextInputLayoutPhone.getEditText().getText().toString();
        String password = mTextInputLayoutPassword.getEditText().getText().toString();
        if (valid(phone, password))
            return;
        mPresenter.login(phone, password);
        mButtonSign.setMode(ActionProcessButton.Mode.ENDLESS);
    }


    @Override
    public void showLoading() {
        mButtonSign.setProgress(50);

    }

    @Override
    public void showLoginFaile(String msg) {
        mButtonSign.setProgress(-1);
        showMsgInBottom(msg);
    }

    @Override
    public void loginSuccess() {
        mButtonSign.setProgress(100);
        this.finish();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.textView_create_account:
                startActivity(new Intent(this, SignUpActivity.class));
                finish();
                break;
            case R.id.button_sign:
                login();
                break;
            case R.id.textView_reset_password:
                startActivity(new Intent(this, ResetPasswordActivity.class));
                finish();
                break;
        }
    }
}