package com.ahmedadel.client.socialmediasignup;

import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;

import com.ahmedadel.socialmediasignup.SocialMediaSignUp;

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

/**
 * Created by Ahmed Adel on 2/16/18.
 */

public class TabbedSocialMediaActivity extends AppCompatActivity {

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

        setSupportActionBar(findViewById(R.id.toolbar));
        if (getSupportActionBar() != null) {
            getSupportActionBar().setTitle(R.string.tabbed_social_media);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }

        initUI();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                onBackPressed();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

    void initUI() {
        ViewPager viewPager = findViewById(R.id.tabbed_social_media_view_pager);
        TabLayout tabbedBrowserTabLayout = findViewById(R.id.tabbed_social_media_tab_layout);

        List<SocialMediaItem> items = getListOfItems();
        if (items != null && items.size() <= 3)
            tabbedBrowserTabLayout.setTabMode(TabLayout.MODE_FIXED);
        else
            tabbedBrowserTabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);

        setupViewPager(viewPager, items);
        tabbedBrowserTabLayout.setupWithViewPager(viewPager);
    }

    private List<SocialMediaItem> getListOfItems() {
        ArrayList<SocialMediaItem> socialMediaItems = new ArrayList<>();
        socialMediaItems.add(new SocialMediaItem(SocialMediaSignUp.SocialMediaType.FACEBOOK));
        socialMediaItems.add(new SocialMediaItem(SocialMediaSignUp.SocialMediaType.TWITTER));
        socialMediaItems.add(new SocialMediaItem(SocialMediaSignUp.SocialMediaType.INSTAGRAM));
        socialMediaItems.add(new SocialMediaItem(SocialMediaSignUp.SocialMediaType.GOOGLE_PLUS));
        socialMediaItems.add(new SocialMediaItem(SocialMediaSignUp.SocialMediaType.LINKEDIN));
        return socialMediaItems;
    }

    protected void setupViewPager(ViewPager viewPager, List<SocialMediaItem> items) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());

        for (SocialMediaItem item : items)
            adapter.addFragment(SocialMediaFragment.newInstance(item.getSocialMediaType()), item.getSocialMediaType().getValue());

        viewPager.setOffscreenPageLimit(items.size());
        viewPager.setAdapter(adapter);
    }

    private class SocialMediaItem {
        private SocialMediaSignUp.SocialMediaType socialMediaType;

        SocialMediaItem(SocialMediaSignUp.SocialMediaType socialMediaType) {
            this.socialMediaType = socialMediaType;
        }

        SocialMediaSignUp.SocialMediaType getSocialMediaType() {
            return socialMediaType;
        }
    }

    protected class ViewPagerAdapter extends FragmentStatePagerAdapter {

        private final List<Fragment> fragmentList = new ArrayList<>();
        private final List<String> fragmentTitleList = new ArrayList<>();

        ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return fragmentList.get(position);
        }

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

        void addFragment(Fragment fragment, String title) {
            fragmentList.add(fragment);
            fragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return fragmentTitleList.get(position);
        }
    }

}