/*
 * Created by LuaView.
 * Copyright (c) 2017, Alibaba Group. All rights reserved.
 *
 * This source code is licensed under the MIT.
 * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
 */

package com.taobao.luaview.userdata.ui;

import android.annotation.TargetApi;
import android.os.Build;
import android.text.TextUtils;
import android.widget.TextView;

import com.taobao.luaview.util.TextUtil;
import com.taobao.luaview.util.TypefaceUtil;

import org.luaj.vm2.Globals;
import org.luaj.vm2.LuaValue;
import org.luaj.vm2.Varargs;

/**
 * Label 数据封装
 *
 * @param <T>
 * @author song
 */
public class UDTextView<T extends TextView> extends UDView<T> {
    private int mMaxLines = 1;
    private int mMinLines = 1;
    private int mTextAlignment = TextView.TEXT_ALIGNMENT_GRAVITY;

    public UDTextView(T view, Globals globals, LuaValue metatable, Varargs initParams) {
        super(view, globals, metatable, initParams);
    }

    /**
     * 设置显示文字
     *
     * @param text String
     */
    public UDTextView setText(CharSequence text) {
        final T view = getView();
        if (view != null) {
            view.setText(text);
        }
        return this;
    }

    /**
     * get text
     *
     * @return
     */
    public CharSequence getText() {
        return getView() != null ? getView().getText() : "";
    }

    /**
     * 设置显示文字颜色
     *
     * @param color int
     */
    public UDView setTextColor(Integer color) {
        if (color != null) {
            final T view = getView();
            if (view != null) {
                view.setTextColor(color);
            }
        }
        return this;
    }

    /**
     * 获取文字颜色
     *
     * @return
     */
    public int getTextColor() {
        return getView() != null ? getView().getTextColors().getDefaultColor() : 0;
    }

    /**
     * 设置字体和大小
     *
     * @param fontName
     * @param fontSize
     * @return
     */
    public UDTextView setFont(String fontName, float fontSize) {
        setFont(fontName);
        setTextSize(fontSize);
        return this;
    }

    /**
     * 设置字体
     *
     * @param fontName
     * @return
     */
    public UDTextView setFont(String fontName) {
        if (fontName != null) {
            final T view = getView();
            if (view != null && getLuaResourceFinder() != null) {
                view.setTypeface(getLuaResourceFinder().findTypeface(fontName));
            }
        }
        return this;
    }

    /**
     * 获取字体
     *
     * @return
     */
    public String getFont() {
        return getView() != null ? TypefaceUtil.getTypefaceName(getView().getTypeface()) : "";
    }

    /**
     * 设置字体
     *
     * @param textSize
     * @return
     */
    public UDTextView setTextSize(float textSize) {
        if (textSize > -1) {
            final T view = getView();
            if (view != null) {
                view.setTextSize(textSize);
            }
        }
        return this;
    }

    /**
     * 获取文字大小
     *
     * @return
     */
    public float getTextSize() {
        return getView() != null ? getView().getTextSize() : 0f;
    }


    /**
     * 设置文字的对齐
     *
     * @param gravity
     * @return
     */
    public UDTextView setGravity(int gravity) {
        final T view = getView();
        if (gravity > 0 && view != null) {
            view.setGravity(gravity);
        }
        return this;
    }

    /**
     * 文字对齐
     *
     * @return
     */
    public int getGravity() {
        return getView() != null ? getView().getGravity() : -1;
    }


    /**
     * 设置文字的对齐
     *
     * @param gravity
     * @return
     */
    public UDTextView setTextAlign(int gravity) {
        return setGravity(gravity);
    }

    /**
     * 获得文字的对齐方式
     *
     * @return
     */
    public int getTextAlign() {
        return getGravity();
    }


    /**
     * 设置文字的绘制
     *
     * @param alignment
     * @return
     */
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    public UDTextView setTextAlignment(int alignment) {
        mTextAlignment = alignment;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            final T view = getView();
            if (alignment > 0 && view != null) {
                view.setTextAlignment(alignment);
            }
        }
        return this;
    }

    /**
     * 获得文字的对齐方式
     *
     * @return
     */
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    public int getTextAlignment() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            return getView() != null ? getView().getTextAlignment() : TextView.TEXT_ALIGNMENT_GRAVITY;
        } else {
            return mTextAlignment;
        }
    }

    /**
     * 设置文字的行数
     *
     * @param lines
     * @return
     */
    public UDTextView setLines(int lines) {
        if (lines > 0) {
            final T view = getView();
            if (view != null) {
                view.setLines(lines);
            }
        }
        return this;
    }

    /**
     * 获得行数
     *
     * @return
     */
    public int getLines() {
        return getView() != null ? getView().getLineCount() : 0;
    }

    /**
     * 设置文字的最小行数
     *
     * @param lines
     * @return
     */
    public UDTextView setMinLines(int lines) {
        if (lines > 0) {
            final T view = getView();
            if (view != null) {
                mMinLines = lines;
                view.setMinLines(lines);
            }
        }
        return this;
    }

    /**
     * 获得最小行数
     *
     * @return
     */
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    public int getMinLines() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            return getView() != null ? getView().getMinLines() : 1;
        } else {
            return mMinLines;
        }
    }

    /**
     * 设置文字的最大行数
     *
     * @param lines
     * @return
     */
    public UDTextView setMaxLines(int lines) {
        final T view = getView();
        if (view != null) {
            this.mMaxLines = lines <= 0 ? Integer.MAX_VALUE : lines;
            view.setMaxLines(mMaxLines);
        }

        return this;
    }

    /**
     * 获得最大行数
     *
     * @return
     */
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    public int getMaxLines() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            return getView() != null ? getView().getMaxLines() : 1;
        } else {
            return mMaxLines;
        }
    }


    /**
     * 设置超出部分的显示方式
     *
     * @param truncateAt
     * @return
     */
    public UDTextView setEllipsize(TextUtils.TruncateAt truncateAt) {
        final T view = getView();
        if (view != null) {
            view.setEllipsize(truncateAt);
        }
        return this;
    }

    public String getEllipsize() {
        return getView() != null ? getView().getEllipsize().name() : TextUtils.TruncateAt.END.name();
    }

    /**
     * 修改文字大小
     *
     * @return
     */
    public UDTextView adjustTextSize() {
        final T view = getView();
        if (view != null) {
            TextUtil.adjustTextSize(view);
        }
        return this;
    }

    /**
     * 修改文字的frame
     *
     * @return
     */
    @Override
    public UDTextView adjustSize() {
        final T view = getView();
        if (view != null) {
            TextUtil.adjustSize(view);
        }
        return this;
    }
}