package com.d.music.local.fragment;

import android.support.v4.content.ContextCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.View;

import com.d.lib.xrv.adapter.CommonAdapter;
import com.d.music.MainActivity;
import com.d.music.R;
import com.d.music.component.media.controler.MediaControler;
import com.d.music.data.database.greendao.bean.MusicModel;
import com.d.music.data.database.greendao.db.AppDB;
import com.d.music.data.preferences.Preferences;
import com.d.music.event.eventbus.MusicModelEvent;
import com.d.music.event.eventbus.RefreshEvent;
import com.d.music.local.adapter.SongAdapter;
import com.d.music.view.SongHeaderView;
import com.d.music.view.sort.SideBar;
import com.d.music.view.sort.SortUtil;

import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

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

/**
 * 首页-本地歌曲-歌曲
 * Created by D on 2017/4/29.
 */
public class LMSongFragment extends AbstractLMFragment<MusicModel> implements SongHeaderView.OnHeaderListener, SideBar.OnLetterChangedListener {
    private Preferences p;
    private SongHeaderView header;
    private SortUtil sortUtil;
    private boolean isNeedReLoad; // 为了同步收藏状态,需要重新加载数据
    private boolean isSubPull; // 为了同步设置,需要重新刷新

    @Override
    protected void init() {
        p = Preferences.getIns(getActivity().getApplicationContext());
        isSubPull = p.getIsSubPull();
        sortUtil = new SortUtil();
        sbSideBar.setOnLetterChangedListener(this);
        super.init();
    }

    @Override
    protected CommonAdapter<MusicModel> getAdapter() {
        SongAdapter adapter = new SongAdapter(mContext, new ArrayList<MusicModel>(),
                R.layout.module_local_adapter_song, AppDB.LOCAL_ALL_MUSIC);
        adapter.setSubPull(isSubPull);
        adapter.setOnDataChangedListener(new SongAdapter.OnDataChangedListener() {
            @Override
            public void onChange(int count) {
                notifyDataCountChanged(count);
            }
        });
        return adapter;
    }

    @Override
    protected void onLoad(int page) {
        mPresenter.getSong(AppDB.LOCAL_ALL_MUSIC, sortUtil);
    }

    @Override
    protected void initList() {
        header = new SongHeaderView(mContext);
        header.setBackgroundColor(ContextCompat.getColor(mContext, R.color.lib_pub_color_bg_sub));
        header.setVisibility(R.id.flyt_header_song_handler, View.GONE);
        header.setVisibility(View.GONE);
        header.setOnHeaderListener(this);
        mXrvList.addHeaderView(header);
        mXrvList.setCanRefresh(false);
        mXrvList.setCanLoadMore(false);
        super.initList();
    }

    @Override
    protected void onVisible() {
        MainActivity.getManger().setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
        super.onVisible();
    }

    @Override
    protected void onInvisible() {
        MainActivity.getManger().setDrawerLockMode(DrawerLayout.LOCK_MODE_UNDEFINED);
        super.onInvisible();
    }

    @Override
    public void onResume() {
        super.onResume();
        if (isNeedReLoad) {
            isNeedReLoad = false;
            getData();
        }
        if (isSubPull != p.getIsSubPull()) {
            isSubPull = !isSubPull;
            ((SongAdapter) mAdapter).setSubPull(isSubPull);
            if (!isSubPull) {
                mPresenter.subPullUp(mAdapter.getDatas());
            }
        }
    }

    @Override
    public void setSong(List<MusicModel> models) {
        mCommonLoader.setData(models);
        notifyDataCountChanged(mCommonLoader.getDatas().size());
    }

    private void notifyDataCountChanged(int count) {
        header.setSongCount(count);
        header.setVisibility(count <= 0 ? View.GONE : View.VISIBLE);
        sbSideBar.setVisibility(count <= 0 ? View.GONE : View.VISIBLE);
    }

    @Override
    public void onPlayAll() {
        List<MusicModel> datas = mCommonLoader.getDatas();
        if (datas != null && datas.size() > 0) {
            MediaControler.getIns(mContext).init(datas, 0, true);
        }
    }

    @Override
    public void onHandle() {

    }

    @Override
    public void onChange(int index, String c) {
        sortUtil.onChange(index, c, mXrvList);
    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    @SuppressWarnings("unused")
    public void onEvent(MusicModelEvent event) {
        if (event == null || getActivity() == null || getActivity().isFinishing()
                || event.type != AppDB.LOCAL_ALL_MUSIC || mPresenter == null || !mIsLazyLoaded) {
            return;
        }
        setSong(event.list);
    }

    @Subscribe(threadMode = ThreadMode.POSTING)
    @SuppressWarnings("unused")
    public void onEventRefresh(RefreshEvent event) {
        if (event == null || getActivity() == null || getActivity().isFinishing()) {
            return;
        }
        isNeedReLoad = true;
    }

    @Override
    public void onDestroy() {
        MainActivity.getManger().setDrawerLockMode(DrawerLayout.LOCK_MODE_UNDEFINED);
        super.onDestroy();
    }
}