package com.marverenic.music.ui.library.artist.contents;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.widget.GridLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import com.marverenic.adapter.EnhancedViewHolder;
import com.marverenic.adapter.HeterogeneousAdapter;
import com.marverenic.music.R;
import com.marverenic.music.lastfm.model.LfmArtist;
import com.marverenic.music.lastfm.model.Tag;

public class ArtistBioSingleton extends HeterogeneousAdapter.SingletonSection<LfmArtist> {

    private boolean mHasRelatedArtists;

    public ArtistBioSingleton(LfmArtist data, boolean hasRelatedArtists) {
        super(data);
        mHasRelatedArtists = hasRelatedArtists;
    }

    @Override
    public EnhancedViewHolder<LfmArtist> createViewHolder(HeterogeneousAdapter adapter,
                                                          ViewGroup parent) {
        return new ViewHolder(
                LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.instance_artist_bio, parent, false),
                mHasRelatedArtists);
    }

    @Override
    public boolean showSection(HeterogeneousAdapter adapter) {
        return get(0) != null;
    }

    public void setHasRelatedArtists(boolean hasRelatedArtists) {
        mHasRelatedArtists = hasRelatedArtists;
    }

    public static class ViewHolder extends EnhancedViewHolder<LfmArtist>
            implements View.OnClickListener {

        private TextView bioText;
        private Button lfmButton;
        private String artistURL;

        public ViewHolder(View itemView, boolean hasRelatedArtists) {
            super(itemView);

            bioText = (TextView) itemView.findViewById(R.id.artist_bio_content);
            lfmButton = (Button) itemView.findViewById(R.id.artist_bio_lfm_link);
            lfmButton.setOnClickListener(this);

            if (hasRelatedArtists) {
                ((GridLayoutManager.LayoutParams) itemView.getLayoutParams()).bottomMargin = 0;
            }
        }

        @Override
        @SuppressLint("SetTextI18n")
        public void onUpdate(LfmArtist item, int sectionPosition) {
            Tag[] tags = item.getTags();
            String[] tagNames = new String[tags.length];

            for (int i = 0; i < tags.length; i++) {
                tagNames[i] = tags[i].getName();
            }

            String tagList = ""; // A list of tags to display in the card

            if (tags.length > 0) {
                // Capitalize the first letter of the tag
                tagList = tagNames[0].substring(0, 1).toUpperCase() + tagNames[0].substring(1);
                // Add up to 4 more tags (separated by commas)
                int tagCount = (tags.length < 5) ? tags.length : 5;
                for (int i = 1; i < tagCount; i++) {
                    tagList += ", " + tagNames[i].substring(0, 1).toUpperCase()
                            + tagNames[i].substring(1);
                }
            }

            String summary = item.getBio().getSummary();
            if (!summary.isEmpty()) {
                // Trim the "read more" attribution since there's already a button
                // linking to Last.fm
                summary = summary.substring(0, summary.lastIndexOf("<a href=\""));
            }

            bioText.setText(tagList
                    + ((!tagList.trim().isEmpty() && !summary.trim().isEmpty()) ? "\n\n" : "")
                    + summary);

            artistURL = item.getUrl();
        }

        @Override
        public void onClick(View v) {
            if (v.equals(lfmButton)) {
                Intent openLFMIntent = new Intent(Intent.ACTION_VIEW);
                if (artistURL == null) {
                    openLFMIntent.setData(Uri.parse("http://www.last.fm/home"));
                } else {
                    openLFMIntent.setData(Uri.parse(artistURL));
                }
                itemView.getContext().startActivity(openLFMIntent);
            }
        }
    }
}

@@ -3442,16 +3442,23 @@
 ef=%5C%22%22))
+.trim()
 ;%0A      
@@ -3564,23 +3564,16 @@
 summary.
-trim().
 isEmpty(

Remove extra newlines on some artist bios