package ceui.lisa.fragments;

import android.content.DialogInterface;
import android.content.Intent;
import android.view.MenuItem;
import android.view.View;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.Toolbar;

import java.util.List;
import java.util.UUID;

import ceui.lisa.R;
import ceui.lisa.activities.Shaft;
import ceui.lisa.activities.UserActivity;
import ceui.lisa.activities.VActivity;
import ceui.lisa.adapters.BaseAdapter;
import ceui.lisa.adapters.HistoryAdapter;
import ceui.lisa.core.BaseRepo;
import ceui.lisa.core.LocalRepo;
import ceui.lisa.core.PageData;
import ceui.lisa.database.AppDatabase;
import ceui.lisa.database.IllustHistoryEntity;
import ceui.lisa.databinding.FragmentBaseListBinding;
import ceui.lisa.databinding.RecyViewHistoryBinding;
import ceui.lisa.interfaces.OnItemClickListener;
import ceui.lisa.models.IllustsBean;
import ceui.lisa.utils.Common;
import ceui.lisa.core.Container;
import ceui.lisa.utils.Params;
import ceui.lisa.viewmodel.BaseModel;
import ceui.lisa.viewmodel.HistoryModel;


public class FragmentHistory extends LocalListFragment<FragmentBaseListBinding,
        IllustHistoryEntity> {

    @Override
    public BaseAdapter<IllustHistoryEntity, RecyViewHistoryBinding> adapter() {
        return new HistoryAdapter(allItems, mContext).setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(View v, int position, int viewType) {
                Common.showLog(className + position + " " + allItems.size());
                if (viewType == 0) {
                    final String uuid = UUID.randomUUID().toString();
                    final PageData pageData = new PageData(uuid, ((HistoryModel)mModel).getAll());
                    Container.get().addPageToMap(pageData);

                    Intent intent = new Intent(mContext, VActivity.class);
                    intent.putExtra(Params.POSITION, position);
                    intent.putExtra(Params.PAGE_UUID, uuid);
                    mContext.startActivity(intent);


//                    DataChannel.get().setIllustList(((HistoryModel)mModel).getAll());
//                    Intent intent = new Intent(mContext, ViewPagerActivity.class);
//                    intent.putExtra("position", position);
//                    mContext.startActivity(intent);
                } else if (viewType == 1) {
                    Intent intent = new Intent(mContext, UserActivity.class);
                    intent.putExtra(Params.USER_ID, (int) v.getTag());
                    mContext.startActivity(intent);
                }
            }
        });
    }

    @Override
    public BaseRepo repository() {
        return new LocalRepo<List<IllustHistoryEntity>>() {
            @Override
            public List<IllustHistoryEntity> first() {
                return AppDatabase.getAppDatabase(mContext)
                        .downloadDao().getAllViewHistory(PAGE_SIZE, 0);
            }

            @Override
            public List<IllustHistoryEntity> next() {
                return AppDatabase.getAppDatabase(mContext)
                        .downloadDao().getAllViewHistory(PAGE_SIZE, allItems.size());
            }

            @Override
            public boolean hasNext() {
                return true;
            }
        };
    }

    @Override
    public void onFirstLoaded(List<IllustHistoryEntity> illustHistoryEntities) {
        ((HistoryModel)mModel).getAll().clear();
        for (int i = 0; i < illustHistoryEntities.size(); i++) {
            if (illustHistoryEntities.get(i).getType() == 0) {
                IllustsBean illustsBean = Shaft.sGson.fromJson(
                        illustHistoryEntities.get(i).getIllustJson(), IllustsBean.class);
                ((HistoryModel)mModel).getAll().add(illustsBean);
            }
        }
    }

    @Override
    public void onNextLoaded(List<IllustHistoryEntity> illustHistoryEntities) {
        for (int i = 0; i < illustHistoryEntities.size(); i++) {
            if (illustHistoryEntities.get(i).getType() == 0) {
                IllustsBean illustsBean = Shaft.sGson.fromJson(
                        illustHistoryEntities.get(i).getIllustJson(), IllustsBean.class);
                ((HistoryModel)mModel).getAll().add(illustsBean);
            }
        }
    }

    @Override
    public void initToolbar(Toolbar toolbar) {
        super.initToolbar(toolbar);
        toolbar.inflateMenu(R.menu.delete_all);
        toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                if (item.getItemId() == R.id.action_delete) {
                    if (allItems.size() == 0) {
                        Common.showToast("没有浏览历史");
                    } else {
                        AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
                        builder.setTitle("PixShaft 提示");
                        builder.setMessage("这将会删除所有的本地浏览历史");
                        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                AppDatabase.getAppDatabase(mContext).downloadDao().deleteAllHistory();
                                Common.showToast("删除成功");
                                mRefreshLayout.autoRefresh();
                            }
                        });
                        builder.setNegativeButton("取消", null);
                        AlertDialog alertDialog = builder.create();
                        alertDialog.show();
                    }
                }
                return true;
            }
        });
    }

    @Override
    public Class<? extends BaseModel> modelClass() {
        return HistoryModel.class;
    }

    @Override
    public String getToolbarTitle() {
        return "浏览记录";
    }
}