package com.architjn.audiobook.presenter;

import android.Manifest;
import android.content.Context;
import android.content.DialogInterface;
import android.support.design.widget.TabLayout;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AlertDialog;

import com.architjn.audiobook.R;
import com.architjn.audiobook.adapter.ViewPagerAdapter;
import com.architjn.audiobook.interactor.MainInteractor;
import com.architjn.audiobook.interfaces.IMainPresenter;
import com.architjn.audiobook.interfaces.IMainView;
import com.architjn.audiobook.ui.activity.MainActivity;
import com.architjn.audiobook.ui.fragment.AllAudioBookViewFragment;
import com.architjn.audiobook.ui.fragment.FinishedAudioBookFragment;
import com.architjn.audiobook.ui.fragment.NewAudioBookFragment;
import com.architjn.audiobook.ui.fragment.OnGoingAudioBookFragment;
import com.architjn.audiobook.utils.PermissionChecker;
import com.architjn.audiobook.utils.PrefUtils;

/**
 * Created by HP on 22-07-2017.
 */

public class MainPresenter implements IMainPresenter {
    private final Context context;
    private final PrefUtils pref;
    private MainInteractor interactor;
    private IMainView view;
    private ViewPager viewPager;
    private AllAudioBookViewFragment allFrag;
    private NewAudioBookFragment newFrag;
    private OnGoingAudioBookFragment ongoingFrag;
    private FinishedAudioBookFragment finishedFrag;

    public MainPresenter(Context context) {
        this.view = (IMainView) context;
        this.context = context;
        this.interactor = new MainInteractor(context, this);
        pref = PrefUtils.getInstance(context);
        init();
    }

    private void init() {
        if (pref.getAudioBookFolderPath() == null) {
            AlertDialog.Builder dialog = new AlertDialog.Builder(context);
            dialog.setTitle(R.string.select_directory)
                    .setMessage(R.string.select_directory_dialog_msg)
                    .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            if (view != null)
                                if (PermissionChecker.requestForPermission(context,
                                        Manifest.permission.READ_EXTERNAL_STORAGE,
                                        R.string.read_permission_request, MainActivity.READ_PERMISSION_REQUEST))
                                    view.startFolderChooser();
                        }
                    })
                    .create().show();
        } else interactor.scanForNewAudioBooks();
    }

    public void setupViewPager(ViewPager viewPager, FragmentManager supportFragmentManager) {
        this.viewPager = viewPager;
        allFrag = new AllAudioBookViewFragment();
        newFrag = new NewAudioBookFragment();
        ongoingFrag = new OnGoingAudioBookFragment();
        finishedFrag = new FinishedAudioBookFragment();
        ViewPagerAdapter adapter = new ViewPagerAdapter(context, supportFragmentManager);
        adapter.addFragment(allFrag, R.string.all);
        adapter.addFragment(newFrag, R.string.new_txt);
        adapter.addFragment(ongoingFrag, R.string.ongoing);
        adapter.addFragment(finishedFrag, R.string.finished);
        viewPager.setAdapter(adapter);
        viewPager.setCurrentItem(interactor.getPageWithSomeData());
    }

    public void setTabLayout(TabLayout tabLayout) {
        tabLayout.setupWithViewPager(viewPager);
    }

    @Override
    public void startFolderChooser() {
        if (view != null)
            view.startFolderChooser();
    }

    @Override
    public void onNewAudioBookLoaded() {
        allFrag.updateBookList();
        newFrag.updateBookList();
    }

    public MainInteractor getInteractor() {
        return interactor;
    }
}