package com.xyoye.dandanplay.ui.fragment;

import android.support.annotation.NonNull;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.SparseArray;

import com.blankj.utilcode.util.FileUtils;
import com.xyoye.dandanplay.R;
import com.xyoye.dandanplay.base.BaseMvpFragment;
import com.xyoye.dandanplay.base.BaseRvAdapter;
import com.xyoye.dandanplay.bean.DownloadedTaskBean;
import com.xyoye.dandanplay.bean.event.UpdateFragmentEvent;
import com.xyoye.dandanplay.mvp.impl.DownloadedFragmentPresenterImpl;
import com.xyoye.dandanplay.mvp.presenter.DownloadedFragmentPresenter;
import com.xyoye.dandanplay.mvp.view.DownloadedFragmentView;
import com.xyoye.dandanplay.ui.weight.dialog.TaskDownloadedFileDialog;
import com.xyoye.dandanplay.ui.weight.dialog.TaskDownloadedInfoDialog;
import com.xyoye.dandanplay.ui.weight.item.TaskDownloadedItem;
import com.xyoye.dandanplay.utils.database.DataBaseManager;
import com.xyoye.dandanplay.utils.interf.AdapterItem;

import org.greenrobot.eventbus.EventBus;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;

/**
 * Created by xyoye on 2019/8/1.
 */

public class DownloadedFragment extends BaseMvpFragment<DownloadedFragmentPresenter> implements DownloadedFragmentView, TaskDownloadedInfoDialog.TaskDeleteListener {

    @BindView(R.id.task_rv)
    RecyclerView taskRv;

    private BaseRvAdapter<DownloadedTaskBean> taskRvAdapter;
    private List<DownloadedTaskBean> taskList;
    private SparseArray<TaskDownloadedFileDialog> dialogArray = new SparseArray<>();

    public static DownloadedFragment newInstance() {
        return new DownloadedFragment();
    }

    @NonNull
    @Override
    protected DownloadedFragmentPresenter initPresenter() {
        return new DownloadedFragmentPresenterImpl(this, this);
    }

    @Override
    protected int initPageLayoutId() {
        return R.layout.fragment_downloaded;
    }

    @Override
    public void initView() {
        taskList = new ArrayList<>();
        taskRv.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false));
        taskRvAdapter = new BaseRvAdapter<DownloadedTaskBean>(taskList) {
            @NonNull
            @Override
            public AdapterItem<DownloadedTaskBean> onCreateItem(int viewType) {
                return new TaskDownloadedItem(dialogArray, DownloadedFragment.this);
            }
        };
        taskRv.setAdapter(taskRvAdapter);

        presenter.queryDownloadedTask();
    }

    @Override
    public void initListener() {

    }

    @Override
    public void showLoading() {
        showLoadingDialog();
    }

    @Override
    public void hideLoading() {
        dismissLoadingDialog();
    }

    @Override
    public void showError(String message) {

    }

    @Override
    public void updateTask(List<DownloadedTaskBean> taskList) {
        this.taskList.clear();
        this.taskList.addAll(taskList);
        taskRvAdapter.notifyDataSetChanged();
    }

    @Override
    public void onTaskDelete(int position, String taskHash, boolean withFile) {
        //删除系统中文件
        if (withFile) {
            FileUtils.deleteDir(taskList.get(position).getSaveDirPath());
        }

        //删除数据库中信息
        DataBaseManager.getInstance()
                .selectTable("downloaded_task")
                .delete()
                .where("torrent_hash", taskHash)
                .postExecute();
        DataBaseManager.getInstance()
                .selectTable("downloaded_file")
                .delete()
                .where("task_torrent_hash", taskHash)
                .postExecute();

        //刷新媒体库数据
        EventBus.getDefault().post(UpdateFragmentEvent.updatePlay(PlayFragment.UPDATE_SYSTEM_DATA));

        //更新界面数据
        if (position > -1 && position < taskList.size())
            taskRvAdapter.removeItem(position);
    }

    public void updateTask() {
        presenter.queryDownloadedTask();
    }

    public void updateDanmu(int taskPosition, int taskFilePosition, String danmuPath, int episodeId) {
        if (taskPosition == -1 || taskFilePosition == -1)
            return;

        if (taskPosition < taskList.size()) {
            DownloadedTaskBean taskBean = taskList.get(taskPosition);
            if (taskFilePosition < taskBean.getFileList().size()) {
                DownloadedTaskBean.DownloadedTaskFileBean fileBean = taskBean.getFileList().get(taskFilePosition);
                fileBean.setDanmuPath(danmuPath);
                fileBean.setEpisode_id(episodeId);

                String hash = taskBean.getTorrentHash();
                DataBaseManager.getInstance()
                        .selectTable("downloaded_file")
                        .update()
                        .param("danmu_path", danmuPath)
                        .param("danmu_episode_id", episodeId)
                        .where("task_torrent_hash", hash)
                        .postExecute();

                //更新弹窗中的图标
                TaskDownloadedFileDialog downloadedFileDialog = dialogArray.get(taskPosition);
                if (downloadedFileDialog != null && downloadedFileDialog.isShowing()) {
                    downloadedFileDialog.updateFileList();
                }

                taskRvAdapter.notifyItemChanged(taskPosition);
            }
        }
    }
}