package com.ldt.musicr.ui.page.featurepage;

import android.annotation.SuppressLint;
import android.content.Context;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.ldt.musicr.R;
import com.ldt.musicr.model.Playlist;
import com.ldt.musicr.model.Song;
import com.ldt.musicr.ui.MainActivity;
import com.ldt.musicr.ui.page.BackStackController;
import com.ldt.musicr.ui.page.librarypage.LibraryTabFragment;
import com.ldt.musicr.ui.page.librarypage.playlist.PlaylistChildTab;
import com.ldt.musicr.ui.page.librarypage.song.SongChildTab;
import com.ldt.musicr.util.Animation;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import me.everything.android.ui.overscroll.OverScrollDecoratorHelper;

public class FeatureLinearHolder {

    private Context mContext;

    @BindView(R.id.playlist_frame)
    ViewGroup mPlayListFrame;

    @BindView(R.id.song_frame)
    ViewGroup mSongFrame;

    public PlaylistMiniAdapter getPlaylistMiniAdapter() {
        return mPlaylistMiniAdapter;
    }

    PlaylistMiniAdapter mPlaylistMiniAdapter;
    SongMiniAdapter mSongMiniAdapter;

    public void setPlaylistItemClick(FeaturePlaylistAdapter.PlaylistClickListener listener) {
        if(mPlaylistMiniAdapter!=null) mPlaylistMiniAdapter.setItemClickListener(listener);
    }

    public FeatureLinearHolder(Context context, ViewGroup linearLayout) {
        this.mContext = context;
        View v = LayoutInflater.from(context).inflate(R.layout.feature_tab_body,linearLayout,false);
        ButterKnife.bind(this,v);
        mPlayListFrame.setVisibility(View.GONE);

        linearLayout.removeAllViews();
        linearLayout.addView(v);

        mPlaylistMiniAdapter = new PlaylistMiniAdapter(mPlayListFrame);
        mSongMiniAdapter = new SongMiniAdapter(mSongFrame);
    }

    public void setSuggestedPlaylists(List<Playlist> list) {
        mPlaylistMiniAdapter.bind(list);
        if(mPlaylistMiniAdapter.getItemCount()!=0) mPlayListFrame.setVisibility(View.VISIBLE);
        else mPlayListFrame.setVisibility(View.GONE);
    }

    public void setSuggestedSongs(List<Song> song) {
        mSongMiniAdapter.bind(song);
        if(mSongMiniAdapter.getItemCount()!=0) mSongFrame.setVisibility(View.VISIBLE);
        else mSongFrame.setVisibility(View.GONE);
    }

    public class PlaylistMiniAdapter {
        private View mItemView;
        @BindView(R.id.back_top_header) View mHeaderPanel;
        @BindView(R.id.title)
        TextView mTitle;
        @BindView(R.id.recycler_view) RecyclerView mRecyclerView;
        @BindView(R.id.number) TextView mCount;

        FeaturePlaylistAdapter mPlaylistAdapter;

        @OnClick(R.id.back_top_header)
        void goToPlaylistChildTab() {
            if(mContext instanceof MainActivity) {
                BackStackController controller = ((MainActivity) mContext).getBackStackController();
                if (controller != null) {
                    LibraryTabFragment libraryTabFragment = controller.navigateToLibraryTab(true);
                    if(libraryTabFragment!=null) libraryTabFragment.navigateToTab(PlaylistChildTab.TAG);
                }
            }
        }

        private void setItemClickListener(FeaturePlaylistAdapter.PlaylistClickListener listener) {
            if(mPlaylistAdapter!=null) mPlaylistAdapter.setListener(listener);
        }

        PlaylistMiniAdapter(View v) {
            this.mItemView = v;
            ButterKnife.bind(this,v);
            mPlaylistAdapter = new FeaturePlaylistAdapter(mContext,true);
            mRecyclerView.setLayoutManager(new LinearLayoutManager(mContext,LinearLayoutManager.HORIZONTAL,false));

            mRecyclerView.setAdapter(mPlaylistAdapter);
            OverScrollDecoratorHelper.setUpOverScroll(mRecyclerView,OverScrollDecoratorHelper.ORIENTATION_HORIZONTAL);

        }

        @SuppressLint("DefaultLocale")
        public void bind(List<Playlist> playlists) {

            mPlaylistAdapter.setData(playlists);
            mCount.setText(String.format("%d", mPlaylistAdapter.getItemCount()));
        }
        public void notifyDataSetChanged() {
            mPlaylistAdapter.notifyDataSetChanged();
        }
        public int getItemCount() {
            return mPlaylistAdapter.getItemCount();
        }
    }
    public class SongMiniAdapter {
        private View mItemView;
        @BindView(R.id.back_top_header) View mHeaderPanel;
        @BindView(R.id.title)
        TextView mTitle;
        @BindView(R.id.recycler_view) RecyclerView mRecyclerView;
        @BindView(R.id.number) TextView mCount;
        @BindView(R.id.refresh)
        ImageView mRefreshButton;

        @OnClick({R.id.see_all, R.id.back_top_header})
        void seeAll() {
            if(mContext instanceof MainActivity) {
                BackStackController controller = ((MainActivity) mContext).getBackStackController();
                if (controller != null) {
                  LibraryTabFragment libraryTabFragment = controller.navigateToLibraryTab(true);
                          if(libraryTabFragment!=null) libraryTabFragment.navigateToTab(SongChildTab.TAG);
                }
            }
        }

        @OnClick(R.id.refresh_front)
        void refresh() {
            mRefreshButton.animate().rotationBy(360).setInterpolator(Animation.getInterpolator(6)).setDuration(650);
            mAdapter.initializeSong();
        }

        FeatureSongAdapter mAdapter;

        SongMiniAdapter(View v) {
            this.mItemView = v;
            ButterKnife.bind(this,v);
            mAdapter = new FeatureSongAdapter(mContext);
            mRecyclerView.setLayoutManager(new LinearLayoutManager(mContext,LinearLayoutManager.VERTICAL,false));

            mRecyclerView.setAdapter(mAdapter);

        }

        @SuppressLint("DefaultLocale")
        public void bind(List<Song> playlists) {

            mAdapter.setData(playlists);
            mCount.setText(String.format("%d", mAdapter.getAllItemCount()));
        }
        public void notifyDataSetChanged() {
            mAdapter.notifyDataSetChanged();
        }
        public int getItemCount() {
            return mAdapter.getItemCount();
        }
    }


}