package com.summer.netcloud.window;

import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.TextView;

import com.summer.crashsdk.CrashSDK;
import com.summer.netcloud.Constants;
import com.summer.netcloud.ContextMgr;
import com.summer.netcloud.R;
import com.summer.netcloud.message.Messege;
import com.summer.netcloud.message.MsgDispatcher;
import com.summer.netcloud.utils.JobScheduler;
import com.summer.netcloud.utils.Log;
import com.summer.netcloud.utils.ResTools;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by summer on 25/06/2018.
 */

public class CrashRecordWindow extends AbsListContentWindow<String, TextView> implements View.OnClickListener{

    private static final String TAG = Constants.TAG + ".CrashRecordWindow";

    private TitleBar mTitleBar;

    public CrashRecordWindow(Context context) {
        super(context);

        setEmptyDescryption(ResTools.getString(R.string.tips_none_crash));
    }

    @Override
    protected View getTitleBar() {
        if(mTitleBar == null){
            mTitleBar = new TitleBar(getContext());
            mTitleBar.setTitle(R.string.tombstones);
        }

        return mTitleBar;
    }

    @Override
    protected void preSwitchIn() {
        super.preSwitchIn();
        initData();
    }

    @Override
    protected int getItemId(String item) {
        return getData().indexOf(item);
    }

    @Override
    protected TextView createItemView(int position) {
        TextView v = new TextView(getContext());
        v.setTextColor(ResTools.getColor(R.color.text));
        v.setTextSize(TypedValue.COMPLEX_UNIT_PX, (int)ResTools.getDimen(R.dimen.textsize2));
        v.setGravity(Gravity.CENTER_VERTICAL);
        int hp = (int)ResTools.getDimen(R.dimen.hor_padding);
        int vp = (int)ResTools.getDimen(R.dimen.vtl_padding);
        v.setPadding(hp,vp,hp,vp);
        v.setOnClickListener(CrashRecordWindow.this);
        v.setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,  (int)ResTools.getDimen(R.dimen.item_height)));
        v.setBackgroundResource(R.drawable.list_item_bg);

        return v;
    }

    @Override
    protected void bindItem(String item, TextView view) {
        view.setText(item);
        view.setTag(item);
    }

    @Override
    protected void onResume() {
        super.onResume();
        initData();
    }

    private int mTaskSeq = 0;
    private void initData(){
        showLoading();

        ++mTaskSeq;

        Log.d(TAG,"update " + mTaskSeq);

        JobScheduler.scheduleBackground(new JobScheduler.Job("load-crash-files") {
            final private int taskSeq = mTaskSeq;
            final List<String> ls = new ArrayList<>();

            @Override
            public void run() {

                String logDir = CrashSDK.getTombstonesDirectory();
                File fLogDir = new File(logDir);
                if(fLogDir.isDirectory()){
                    String[] logs = fLogDir.list();

                    if(logs != null){
                        for(int i=logs.length-1; i>=0;--i){
                            ls.add(logs[i]);
                        }
                    }
                }

                Log.d(TAG,"data: " + ls.size() + " seq(" + mTaskSeq + "," + taskSeq + ")" + " isShowing: " + isShowing());

                if(mTaskSeq == taskSeq){
                    new Handler(Looper.getMainLooper()).post(new Runnable() {
                        @Override
                        public void run() {
                            Log.d(TAG,"11>>> data: ");
                            if(mTaskSeq == taskSeq){
                                Log.d(TAG,"1>>> data: " + getData().size() + " seq(" + mTaskSeq + "," + taskSeq + ")");
                                updateData(ls);
                            }

                        }
                    });
                }

            }
        });
    }

    @Override
    public void onClick(View v) {
        if(v.getTag() instanceof String){
            String name = (String)v.getTag();
            String directory = CrashSDK.getTombstonesDirectory();
            if(directory == null || name == null){
                return;
            }

            String fullPath = directory;
            if(!directory.endsWith(File.separator)){
                fullPath += File.separator;
            }
            fullPath += name;

            Log.d(TAG,"show log: " + fullPath);

            CrashInfoWindow crashInfoWindow = new CrashInfoWindow(ContextMgr.getContext());
            crashInfoWindow.showCrash(fullPath);
            MsgDispatcher.get().dispatchSync(Messege.PUSH_WINDOW, crashInfoWindow);
        }
    }
}