package com.yidianling.avchatkit.common.widgets;

import android.view.View;
import android.view.ViewGroup;

/**
 * Created by hzlichengda on 14-3-14.
 * if you want to use this parentView with an inner parentView inside ,the inner parentView's id must be R.id.childView
 */
public class ToggleView {

    private View parentView = null;
    private View childView = null;
    private ToggleState state = ToggleState.DISABLE;
    private ToggleListener listener = null;

    public ToggleView(View parentView, ToggleState initState, ToggleListener listener) {
        this.parentView = parentView;
        this.state = initState;
        this.listener = listener;
        init();
    }

    private void init() {
        if (parentView != null) {
            parentView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onToggleStateChange();
                }
            });
            if (parentView instanceof ViewGroup) {
                ViewGroup viewGroup = (ViewGroup) parentView;
                childView = viewGroup.getChildAt(0);
            }
            toggle(state);
        }
    }

    public void toggle(ToggleState state) {
        switch (state) {
            case DISABLE:
                disable(false);
                break;
            case OFF:
                off(false);
                break;
            case ON:
                on(false);
                break;
        }
    }

    private void onToggleStateChange() {
        switch (state) {
            case DISABLE:
                disable(true);
                break;
            case OFF:
                on(true);
                break;
            case ON:
                off(true);
                break;
        }
    }

    public void on(boolean callback) {
        state = ToggleState.ON;

        parentView.setEnabled(true);
        parentView.setSelected(true);

        if (childView != null) {
            childView.setEnabled(true);
            childView.setSelected(true);
        }

        if (listener != null && callback)
            listener.toggleOn(parentView);
    }

    public void off(boolean callback) {
        state = ToggleState.OFF;

        parentView.setEnabled(true);
        parentView.setSelected(false);

        if (childView != null) {
            childView.setEnabled(true);
            childView.setSelected(false);
        }

        if (listener != null && callback)
            listener.toggleOff(parentView);
    }

    public void disable(boolean callback) {
        state = ToggleState.DISABLE;

        parentView.setSelected(false);
        parentView.setEnabled(false);

        if (childView != null) {
            childView.setSelected(false);
            childView.setEnabled(false);
        }

        if (listener != null && callback)
            listener.toggleDisable(parentView);
    }

    public void enable() {
        off(false);
    }

    public boolean isEnable() {
        return state != ToggleState.DISABLE;
    }

}