package com.vincan.medialoader.sample;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import com.vincan.medialoader.DefaultConfigFactory;
import com.vincan.medialoader.DownloadManager;
import com.vincan.medialoader.MediaLoader;
import com.vincan.medialoader.MediaLoaderConfig;
import com.vincan.medialoader.data.file.naming.Md5FileNameCreator;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * 主界面
 *
 * @author vincanyang
 */
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initMediaLoader();
        initListView();
        findViewById(R.id.cleanCache).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try {
                    DownloadManager.getInstance(MainActivity.this).cleanCacheDir();
                } catch (IOException e) {
                    Toast.makeText(MainActivity.this, "Error clean cache", Toast.LENGTH_LONG).show();
                }
            }
        });
    }

    private void initMediaLoader() {
        MediaLoaderConfig mediaLoaderConfig = new MediaLoaderConfig.Builder(this)
                .cacheRootDir(DefaultConfigFactory.createCacheRootDir(this))
                .cacheFileNameGenerator(new Md5FileNameCreator())
                .maxCacheFilesCount(100)
                .maxCacheFilesSize(100 * 1024 * 1024)
                .maxCacheFileTimeLimit(5 * 24 * 60 * 60)
                .downloadThreadPoolSize(3)
                .downloadThreadPriority(Thread.NORM_PRIORITY)
                .build();
        MediaLoader.getInstance(this).init(mediaLoaderConfig);
    }

    private void initListView() {
        ListView listView = (ListView) findViewById(R.id.listView);
        ArrayAdapter arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, android.R.id.text1, getDataList());
        listView.setAdapter(arrayAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
                DataItem item = (DataItem) adapterView.getItemAtPosition(position);
                startActivity(new Intent(MainActivity.this, item.activityClass));
            }
        });
    }

    private List<DataItem> getDataList() {
        List<DataItem> list = new ArrayList<>();
        list.add(new DataItem(getString(R.string.scene_single_video), SingleVideoActivity.class));
        list.add(new DataItem(getString(R.string.scene_single_audio), SingleAudioActivity.class));
        list.add(new DataItem(getString(R.string.scene_viewpager_preload), VideoPagerActivity.class));
        list.add(new DataItem(getString(R.string.scene_viewpager_lazyload), VideoPagerLazyLoadActivity.class));
        return list;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        MediaLoader.getInstance(MainActivity.this).destroy();
    }

    private static final class DataItem {

        private String title;

        private final Class activityClass;

        public DataItem(String title, Class activityClass) {
            this.title = title;
            this.activityClass = activityClass;
        }

        @Override
        public String toString() {
            return title;
        }
    }
}