package zenproject.meditation.android.ui.menu.dialogs.flower;

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

import com.novoda.notils.caster.Views;

import de.hdodenhof.circleimageview.CircleImageView;
import zenproject.meditation.android.ContextRetriever;
import zenproject.meditation.android.R;
import zenproject.meditation.android.sketch.painting.flowers.Flower;
import zenproject.meditation.android.preferences.FlowerOptionPreferences;

import static zenproject.meditation.android.sketch.painting.ink.BrushColor.ACCENT;

/**
 * TODO Consider using an adapter when the number of flowers increases
 */
@SuppressWarnings("PMD.TooManyMethods")
public class FlowerViewList extends LinearLayout {
    private static final int UNSELECTED_BORDER_SIZE = ContextRetriever.INSTANCE.getResources().getDimensionPixelSize(R.dimen.divider_weight);
    private static final int SELECTED_BORDER_SIZE = ContextRetriever.INSTANCE.getResources().getDimensionPixelSize(R.dimen.color_selected_weight);
    private static final int DIVIDER = ContextRetriever.INSTANCE.getResources().getColor(R.color.divider);

    private CircleImageView noneFlower;
    private CircleImageView cherryFlower;
    private CircleImageView meconopsisFlower;
    private CircleImageView poppyFlower;
    private CircleImageView birdsfootFlower;

    private FlowerSelectedListener flowerSelectedListener;

    public FlowerViewList(Context context) {
        super(context);
    }

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

    public FlowerViewList(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        noneFlower = Views.findById(this, R.id.no_flower);
        cherryFlower = Views.findById(this, R.id.cherry);
        meconopsisFlower = Views.findById(this, R.id.meconopsis);
        poppyFlower = Views.findById(this, R.id.poppy);
        birdsfootFlower = Views.findById(this, R.id.birdsfoot_flower);

        setSelectedFrom(FlowerOptionPreferences.newInstance().getFlower());
    }

    private boolean hasFlowerSelectedListener() {
        return flowerSelectedListener != null;
    }

    public void setFlowerSelectedListener(FlowerSelectedListener flowerSelectedListener) {
        this.flowerSelectedListener = flowerSelectedListener;
    }

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        noneFlower.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setSelected((CircleImageView) v);
                notifyFlowerSelected(Flower.NONE);
            }
        });
        cherryFlower.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setSelected((CircleImageView) v);
                notifyFlowerSelected(Flower.CHERRY);
            }
        });
        meconopsisFlower.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setSelected((CircleImageView) v);
                notifyFlowerSelected(Flower.MECONOPSIS);
            }
        });
        poppyFlower.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setSelected((CircleImageView) v);
                notifyFlowerSelected(Flower.POPPY);
            }
        });
        birdsfootFlower.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setSelected((CircleImageView) v);
                notifyFlowerSelected(Flower.BIRDSFOOT);
            }
        });
    }

    private void setSelectedFrom(Flower flower) {
        if (Flower.NONE == flower) {
            setSelected(noneFlower);
        } else if (Flower.CHERRY == flower) {
            setSelected(cherryFlower);
        } else if (Flower.MECONOPSIS == flower) {
            setSelected(meconopsisFlower);
        } else if (Flower.POPPY == flower) {
            setSelected(poppyFlower);
        } else if (Flower.BIRDSFOOT == flower) {
            setSelected(birdsfootFlower);
        }
    }

    private void setSelected(CircleImageView circleImageView) {
        unselectAll();
        circleImageView.setBorderColor(ACCENT.color());
        circleImageView.setBorderWidth(SELECTED_BORDER_SIZE);
    }

    private void unselectAll() {
        noneFlower.setBorderColor(DIVIDER);
        cherryFlower.setBorderColor(DIVIDER);
        meconopsisFlower.setBorderColor(DIVIDER);
        poppyFlower.setBorderColor(DIVIDER);
        birdsfootFlower.setBorderColor(DIVIDER);

        noneFlower.setBorderWidth(UNSELECTED_BORDER_SIZE);
        cherryFlower.setBorderWidth(UNSELECTED_BORDER_SIZE);
        meconopsisFlower.setBorderWidth(UNSELECTED_BORDER_SIZE);
        poppyFlower.setBorderWidth(UNSELECTED_BORDER_SIZE);
        birdsfootFlower.setBorderWidth(UNSELECTED_BORDER_SIZE);
    }

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        noneFlower.setOnClickListener(null);
        cherryFlower.setOnClickListener(null);
        meconopsisFlower.setOnClickListener(null);
        poppyFlower.setOnClickListener(null);
        birdsfootFlower.setOnClickListener(null);
    }

    private void notifyFlowerSelected(Flower flower) {
        if (hasFlowerSelectedListener()) {
            flowerSelectedListener.onFlowerSelected(flower);
        }
    }

}