package com.zzw.activity;

import android.graphics.Color;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.zzw.navigator.ScaleCircleNavigator;
import com.zzw.transformer.RotatePageTransformer;
import com.zzw.transformer.ScalePageTransformer;
import com.zzw.transformer.TransformerType;
import com.zzw.util.ViewAdapter;

import net.lucode.hackware.magicindicator.MagicIndicator;
import net.lucode.hackware.magicindicator.ViewPagerHelper;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class PageActivity extends AppCompatActivity {
    private List<View> pages;
    private ViewPager pager;
    private MagicIndicator indicator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_page);

        pages=getPages();
        initPager();
        initIndicator();
        pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                indicator.onPageScrolled(position, positionOffset, positionOffsetPixels);
            }

            @Override
            public void onPageSelected(int position) {
                indicator.onPageSelected(position);
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                indicator.onPageScrollStateChanged(state);
            }
        });
        ViewPagerHelper.bind(indicator, pager);
    }

    private void initPager() {
        pager=(ViewPager) findViewById(R.id.view_pager);
        PagerAdapter adapter=new ViewAdapter(pages);
        pager.setAdapter(adapter);

        switch (getIntent().getIntExtra(TransformerType.TYPE, TransformerType.NORMAL)) {
            case TransformerType.SCALE:
                pager.setPageTransformer(true, new ScalePageTransformer());
                break;
            case TransformerType.ROTATE:
                pager.setPageTransformer(true, new RotatePageTransformer());
                break;
            default:break;
        }
    }

    private void initIndicator() {
        indicator=(MagicIndicator) findViewById(R.id.bottom_indicator);
        ScaleCircleNavigator navigator=new ScaleCircleNavigator(this);
        navigator.setCircleCount(pages.size());
        navigator.setNormalCircleColor(Color.DKGRAY);
        navigator.setSelectedCircleColor(Color.CYAN);
        navigator.setCircleClickListener(new ScaleCircleNavigator.OnCircleClickListener() {
            @Override
            public void onClick(int index) {
                pager.setCurrentItem(index);
            }
        });
        indicator.setNavigator(navigator);
    }

    private List<View> getPages() {
        List<View> pages=new ArrayList<>();
        Field[] fields=R.drawable.class.getDeclaredFields();
        try {
            for (Field field : fields) {
                if (field.getName().startsWith("page")) {
                    ImageView view = new ImageView(this);
                    view.setImageResource(field.getInt(null));
                    view.setScaleType(ImageView.ScaleType.CENTER_CROP);
                    pages.add(view);
                }
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return pages;
    }
}