package me.jamesxu.androidspan;

import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.BlurMaskFilter;
import android.os.Build;
import android.text.Layout;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.AlignmentSpan;
import android.text.style.BackgroundColorSpan;
import android.text.style.BulletSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
import android.text.style.LocaleSpan;
import android.text.style.MaskFilterSpan;
import android.text.style.QuoteSpan;
import android.text.style.RelativeSizeSpan;
import android.text.style.ScaleXSpan;
import android.text.style.StrikethroughSpan;
import android.text.style.StyleSpan;
import android.text.style.SubscriptSpan;
import android.text.style.SuperscriptSpan;
import android.text.style.TextAppearanceSpan;
import android.text.style.TypefaceSpan;
import android.text.style.URLSpan;
import android.text.style.UnderlineSpan;

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

/**
 * Created by james on 13/10/15.
 */
public class SpanOptions {
    private List<Object> listSpan;

    public SpanOptions() {
        listSpan = new ArrayList<Object>();
    }


    /**
     * 下划线
     *
     * @return
     */
    public SpanOptions addUnderlineSpan() {
        UnderlineSpan span = new UnderlineSpan();
        listSpan.add(span);
        return this;
    }

    public SpanOptions addBulletSpan(int gapWidth, int color) {
        BulletSpan span = new BulletSpan(gapWidth, color);
        listSpan.add(span);
        return this;
    }

    /**
     * URL效果
     * 需要实现textView.setMovementMethod(LinkMovementMethod.getInstance());
     *
     * @param url 格式为:电话:tel:18721850636,邮箱:mailto:[email protected],网站:http://www.baidu.com,短信:mms:4155551212,彩信:mmsto:18721850636,地图:geo:38.899533,-77.036476
     * @return
     */
    public SpanOptions addURLSpan(String url) {
        URLSpan Urlspan = new URLSpan(url);
        listSpan.add(Urlspan);
        return this;
    }

    public SpanOptions addQuoteSpan(int color) {
        QuoteSpan span = new QuoteSpan(color);
        listSpan.add(span);
        return this;
    }

    public SpanOptions addAlignmentSpan(Layout.Alignment align) {
        AlignmentSpan.Standard span = new AlignmentSpan.Standard(align);
        listSpan.add(span);
        return this;
    }

    public SpanOptions addStrikethroughSpan() {
        StrikethroughSpan span = new StrikethroughSpan();
        listSpan.add(span);
        return this;
    }

    public SpanOptions addBackgroundColorSpan(int color) {
        BackgroundColorSpan span = new BackgroundColorSpan(color);
        listSpan.add(span);
        return this;
    }

    /**
     * @param density
     * @param style   BlurMaskFilter.Blur.NORMAL
     * @return
     */
    public SpanOptions addMaskFilterSpan(float density, BlurMaskFilter.Blur style) {
        MaskFilterSpan span = new MaskFilterSpan(new BlurMaskFilter(density, style));
        listSpan.add(span);
        return this;
    }

    public SpanOptions addSubscriptSpan() {
        SubscriptSpan span = new SubscriptSpan();
        listSpan.add(span);
        return this;
    }

    public SpanOptions addSuperscriptSpan() {
        SuperscriptSpan span = new SuperscriptSpan();
        listSpan.add(span);
        return this;
    }

    /**
     * @param style Typeface.BOLD | Typeface.ITALIC
     * @return
     */
    public SpanOptions addStyleSpan(int style) {
        StyleSpan span = new StyleSpan(style);
        listSpan.add(span);
        return this;
    }

    public SpanOptions addAbsoluteSizeSpan(int size, boolean dip) {
        AbsoluteSizeSpan span = new AbsoluteSizeSpan(size, dip);
        listSpan.add(span);
        return this;
    }

    /**
     * 同比放大索小
     *
     * @return
     */
    public SpanOptions addRelativeSizeSpan(float proportion) {
        RelativeSizeSpan span = new RelativeSizeSpan(proportion);
        listSpan.add(span);
        return this;
    }

    public SpanOptions addTextAppearanceSpan(Context context, int appearance) {
        TextAppearanceSpan span = new TextAppearanceSpan(context, appearance);
        listSpan.add(span);
        return this;
    }

    /**
     * @param locale Locale.CHINESE
     * @return
     */
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    public SpanOptions addLocaleSpan(Locale locale) {
        LocaleSpan span = new LocaleSpan(locale);
        listSpan.add(span);
        return this;
    }

    public SpanOptions addScaleXSpan(float proportion) {
        ScaleXSpan span = new ScaleXSpan(proportion);
        listSpan.add(span);
        return this;
    }

    /**
     * @param typeface serif
     * @return
     */
    public SpanOptions addTypefaceSpan(String typeface) {
        TypefaceSpan span = new TypefaceSpan(typeface);
        listSpan.add(span);
        return this;
    }

    public SpanOptions addImageSpan(Context context, int imgId) {
        ImageSpan span = new ImageSpan(context, imgId);
        listSpan.add(span);
        return this;
    }


    /**
     * 文本颜色
     *
     * @return
     */
    public SpanOptions addForegroundColor(int color) {
        ForegroundColorSpan span = new ForegroundColorSpan(color);
        listSpan.add(span);
        return this;
    }


    /**
     * 自定义Span
     *
     * @param object
     * @return
     */

    public SpanOptions addSpan(Object object) {
        listSpan.add(object);
        return this;
    }

    public List<Object> getListSpan() {
        return listSpan;
    }
}