package cn.hadcn.keyboard.media;

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;

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

import cn.hadcn.keyboard.R;


/**
 * @author chris
 */
public class MediaPagerAdapter extends PagerAdapter {
	private static final int MAX_NUM_PER_PAGE = 8;
	private Context mContext;
    private List<MediaGridAdapter> gridAdapterList = new ArrayList<>();
    private int mPageNum = 0;
    private int mColumnWidth = 0;

    public MediaPagerAdapter(Context context, List<MediaBean> mediaModels, int columnWidth) {
        mContext = context;
        mColumnWidth = columnWidth;
        mPageNum = (int) Math.ceil((float) mediaModels.size() / MAX_NUM_PER_PAGE);
        for (int i = 0; i < mPageNum; ++i) {
            ArrayList<MediaBean> mediaItems = new ArrayList<>();
            for (int j = i * MAX_NUM_PER_PAGE; j < (i+1) * MAX_NUM_PER_PAGE && j < mediaModels.size(); ++j) {
                mediaItems.add(mediaModels.get(j));
            }
            MediaGridAdapter adapter = new MediaGridAdapter( mContext, mediaItems, mColumnWidth );
            gridAdapterList.add(adapter);
        }
    }

    public int getPageNum() {
        return mPageNum;
    }

	@Override
	public int getCount() {
		return gridAdapterList.size();
	}

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(R.layout.keyboard_media_page, container, false);

        GridView grid = (GridView) layout.findViewById(R.id.media_grid);
        grid.setColumnWidth(mColumnWidth);
        grid.setAdapter(gridAdapterList.get(position));

        container.addView(layout);

        return layout;
    }

    @Override
    public void notifyDataSetChanged() {
        super.notifyDataSetChanged();
        for (MediaGridAdapter adapter : gridAdapterList) {
            adapter.notifyDataSetChanged();
        }
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeAllViews();
    }

    @Override
	public boolean isViewFromObject(View view, Object object) {
		return view == object;
	}
}