package com.yidianling.dynamic.common.view;

import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.TranslateAnimation;
import android.widget.FrameLayout;
import android.widget.TextView;

import com.yidianling.dynamic.R;
import com.yidianling.dynamic.model.TrendsListBean;
import com.yidianling.dynamic.trendsDetail.TrendsDetailActivity;

import java.util.List;

/**
 * 为home_loop定制的view
 */
public class LooperTextView extends FrameLayout {
    private static final int STATUS_IN = 0;
    private static final int STATUS_OUT = 1;
    private List<TrendsListBean.ExtData> tipList;
    private int curTipIndex = 0;
    private long lastTimeMillis;
    private static final int ANIM_DELAYED_MILLIONS = 4 * 1000;
    /**
     * 动画持续时长
     */
    private static final int ANIM_DURATION = 1000;
    private static final String DEFAULT_TEXT_COLOR = "#2F4F4F";
    private static final int DEFAULT_TEXT_SIZE = 16;
    private View view_out, view_in;
    private TextView content_before_in;
    private TextView content_before_out;

    private Animation anim_out, anim_in;

    private Handler handler = new Handler();

    private  Runnable repeatCode = new Runnable() {
        @Override
        public void run() {
            updateTipAndPlayAnimation();
            handler.postDelayed(repeatCode, ANIM_DELAYED_MILLIONS);
        }
    };

    public LooperTextView(Context context) {
        super(context);
        initTipFrame();
        initAnimation();
    }

    public LooperTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initTipFrame();
        initAnimation();
    }

    public LooperTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initTipFrame();
        initAnimation();
    }

    private void initTipFrame() {
        view_out = newTextView(STATUS_OUT);
        view_in = newTextView(STATUS_IN);
        addView(view_in);
        addView(view_out);
    }

    private View newTextView(int status) {
        View view = LayoutInflater.from(getContext()).inflate(R.layout.dynamic_looper_item, null, false);
        if (status == STATUS_IN) {
            content_before_in = (TextView) view.findViewById(R.id.loop_content_before);
        } else if (status == STATUS_OUT) {
            content_before_out = (TextView) view.findViewById(R.id.loop_content_before);
        }
        return view;
    }

    /**
     * 将资源图片转换为Drawable对象
     *
     * @param ResId
     * @return
     */
    private Drawable loadDrawable(int ResId) {
        Drawable drawable = getResources().getDrawable(ResId);
        drawable.setBounds(0, 0, drawable.getMinimumWidth() - 10, drawable.getMinimumHeight() - 10);
        return drawable;
    }

    private void initAnimation() {
        anim_out = newAnimation(0, -1);
        anim_in = newAnimation(1, 0);
        anim_in.setAnimationListener(new Animation.AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                updateViewVisibility();
            }
        });
    }



    private Animation newAnimation(float fromYValue, float toYValue) {
        Animation anim = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0,
                Animation.RELATIVE_TO_SELF, fromYValue, Animation.RELATIVE_TO_SELF, toYValue);
        anim.setDuration(ANIM_DURATION);
        anim.setInterpolator(new DecelerateInterpolator());
        return anim;
    }

    private void updateTipAndPlayAnimationWithCheck() {
        if (System.currentTimeMillis() - lastTimeMillis < 1000) {
            return;
        }
        lastTimeMillis = System.currentTimeMillis();
        updateTipAndPlayAnimation();
    }

    private void updateViewVisibility() {
        if (curTipIndex % 2 == 0) {
            view_out.setVisibility(INVISIBLE);
        } else {
            view_in.setVisibility(INVISIBLE);
        }
    }

    private void updateTipAndPlayAnimation() {
        view_in.setVisibility(VISIBLE);
        view_out.setVisibility(VISIBLE);
        if (curTipIndex % 2 == 0) {
            updateTip(STATUS_OUT);
            view_in.startAnimation(anim_out);
            view_out.startAnimation(anim_in);
            this.bringChildToFront(view_in);
        } else {
            updateTip(STATUS_IN);
            view_out.startAnimation(anim_out);
            view_in.startAnimation(anim_in);
            this.bringChildToFront(view_out);
        }
    }

    private void updateTip(int status) {
        final TrendsListBean.ExtData tip = getNextTip();
        if (tip != null) {
            if (status == STATUS_IN) {
                SpannableString spannableString=new SpannableString("置顶 "+tip.getTitle());
                spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#FAA05A")), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                content_before_in.setText(spannableString);

                view_in.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        try {
                            TrendsDetailActivity.start(getContext(),Integer.valueOf(tip.getId()),false,false,false,false,0);
                        }catch (Exception e){
                            e.printStackTrace();
                        }
                    }
                });
            } else if (status == STATUS_OUT) {
                SpannableString spannableString=new SpannableString("置顶 "+tip.getTitle());
                spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#FAA05A")), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                content_before_out.setText(spannableString);
                view_out.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        try {
                            TrendsDetailActivity.start(getContext(),Integer.valueOf(tip.getId()),false,false,false,false,0);
                        }catch (Exception e){
                            e.printStackTrace();
                        }

                    }
                });
            }
        }
    }

    /**
     * 获取下一条消息
     *
     * @return
     */
    private TrendsListBean.ExtData getNextTip() {
        if (isListEmpty(tipList)) return null;
        return tipList.get(curTipIndex++ % tipList.size());
    }

    public static boolean isListEmpty(List list) {
        return list == null || list.isEmpty();
    }

    public void setTipList(List<TrendsListBean.ExtData> tipList) {
        handler.removeCallbacks(repeatCode);
        this.tipList = tipList;
        curTipIndex = 0;
        updateTip(STATUS_OUT);
        updateTipAndPlayAnimation();
        handler.postDelayed(repeatCode, ANIM_DELAYED_MILLIONS);
    }

}