package com.yf.scan.scanner.view;

import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.yf.scan.R;

import java.lang.ref.WeakReference;

public class TitleBar extends LinearLayout implements OnClickListener {

    private WeakReference<Activity> activity;
    private String titleName;

    private LinearLayout ll_back;
    private View view;
    private TextView tv_title;
    private TextView btn_photo_libary;
    private OnBackListener backListener;
    private OnBackListener doBackListener;

    public interface OnBackListener {
        void onBack();
    }

    public TitleBar(Context context) {
        this(context, null);
    }

    public TitleBar(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public TitleBar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TitleBar);
        titleName = a.getString(R.styleable.TitleBar_title_name);
        a.recycle();

        init();
    }

    private void init() {
        LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.layout_title_bar, this);
        ll_back = (LinearLayout) view.findViewById(R.id.ll_back);
        tv_title = (TextView) view.findViewById(R.id.tv_title);
        if (titleName != null) {
            tv_title.setVisibility(View.VISIBLE);
            tv_title.setText(titleName);
        }
        this.btn_photo_libary = (TextView) view.findViewById(R.id.btn_photo_libary);
    }

    public void setTitleBarHeight(int height) {
        ViewGroup.LayoutParams params = view.getLayoutParams();
        params.height = height;
        view.setLayoutParams(params);
    }

    public void setBackVisible(boolean isVisible) {
        if (isVisible) {
            ll_back.setVisibility(View.VISIBLE);
        } else {
            ll_back.setVisibility(View.GONE);
        }
    }

    public void setDoBackListener(final OnBackListener doBackListener) {
        this.doBackListener = doBackListener;
        ll_back.setVisibility(View.VISIBLE);
        ll_back.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (doBackListener != null)
                    doBackListener.onBack();
            }
        });
    }

    public TitleBar showBack(Activity activity) {
        this.activity = new WeakReference<>(activity);
        ll_back.setVisibility(View.VISIBLE);
        ll_back.setOnClickListener(this);
        return this;
    }

    public TitleBar setupDecodeFromLocalImg(View.OnClickListener onClickListener) {
        this.btn_photo_libary.setOnClickListener(onClickListener);
        return this;
    }

    public TitleBar setOnBackListener(OnBackListener backListener) {
        this.backListener = backListener;
        return this;
    }

    public TitleBar showTitle(String title) {
        titleName = title;

        tv_title.setVisibility(View.VISIBLE);
        tv_title.setText(title);
        return this;
    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        if (R.id.ll_back == id) {
            if (activity == null)
                return;

            Activity aty = activity.get();
            if (aty != null) {
                if (backListener != null) {
                    backListener.onBack();
                }
                aty.finish();
                activity = null;
            }
        }
    }

    @Override
    protected void onDisplayHint(int hint) {
        super.onDisplayHint(hint);
    }

    public String getTitle() {
        return titleName;
    }

    public Activity getActivity() {
        return activity.get();
    }

}
