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

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.LinearLayout;

import kz.arta.synergy.workflow.mobile.android.R;

/**
 * Created by neox on 15.02.16.
 * Кастомный чекбокс
 */
public class ACheckBox extends LinearLayout {

    /**
     * Размер чекбокса
     */
    private static final float SCALE = 0.8f;

    /**
     * Чекбокс
     */
    private CheckBox checkBox;

    /**
     * Текст чекбокса
     */
    private ATitle textView;

    /**
     * Лиснер чекбокса
     */
    private CheckBoxListener checkBoxListener;

    public ACheckBox(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    /**
     * Инициализация
     */
    private void init() {

        // горизонтальня ориентация
        setOrientation(LinearLayout.HORIZONTAL);

        // параметры для чекбокса
        final LayoutParams checkBoxParams = new LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

        // параметры для текста
        LayoutParams textViewParams = new LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        textViewParams.setMargins((int) getResources().getDimension(R.dimen.activity_components_margin), 0, 0, 0);

        // чекбокс
        checkBox = new CheckBox(getContext());
        checkBox.setLayoutParams(checkBoxParams);
        checkBox.setButtonDrawable(getResources().getDrawable(R.drawable.checkbox_background));
        checkBox.setScaleX(SCALE);
        checkBox.setScaleY(SCALE);
        checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (checkBoxListener == null) {
                    return;
                }
                checkBoxListener.changeState(isChecked);
            }
        });

        // текст
        textView = new ATitle(getContext());
        textView.setMaxLines(2);
        textView.setLayoutParams(textViewParams);
        textView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!checkBox.isEnabled()) {
                    return;
                }
                checkBox.setChecked(!checkBox.isChecked());
            }
        });

        // добавляем на layout компоненты
        addView(checkBox);
        addView(textView);
    }

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

    /**
     * Метод возвращает состояниие чекбокса
     *
     * @return true/false
     */
    public boolean getValue() {
        return checkBox.isChecked();
    }

    /**
     * Метод устанавливает компонент в указанное состояние
     *
     * @param value true/false
     */
    public void setValue(boolean value) {
        checkBox.setChecked(value);
    }

    /**
     * Метод устанавливает компонент в неактивное состояние
     *
     * @param enabled true/false
     */
    public void setEnabled(boolean enabled) {
        checkBox.setEnabled(enabled);
    }

    public void addTextBoxListener(CheckBoxListener checkBoxListener) {
        this.checkBoxListener = checkBoxListener;
    }

    public interface CheckBoxListener {

        /**
         * Метод используется при изменении состояния чекбокса
         *
         * @param state true/false
         */
        void changeState(boolean state);
    }

}
