package com.neptune.plugin.models;

import com.neptune.utils.MyLog;
import com.pax.gl.page.IPage;

import org.json.JSONException;
import org.json.JSONObject;

public class GLPageUnitModel {

    private PageUnitType type;
    private IPage.EAlign align;
    private int fontSize;
    private EStyle style;
    private String data;
    private float weight;

    public GLPageUnitModel(PageUnitType type, IPage.EAlign align, int fontSize, EStyle style, String data, float weight) {
        this.type =  type;
        this.align = align;
        this.fontSize = fontSize;
        this.style = style;
        this.data = data;
        this.weight = weight;
    }

    public GLPageUnitModel(JSONObject jsonObject) throws JSONException {
        this(
                PageUnitType.value(jsonObject.getString("type")),
                EAlignToEnum(jsonObject.getString("align")),
                jsonObject.getInt("fontSize"),
                EStyle.value(jsonObject.getString("style")),
                jsonObject.getString("data"),
                (float)jsonObject.getDouble("weight")
        );
    }

    public PageUnitType getType() {
        return type;
    }

    public IPage.EAlign getAlign() {
        return align;
    }

    public int getFontSize() {
        return fontSize;
    }

    public EStyle getStyle() {
        return style;
    }

    public String getData() {
        return data;
    }

    public float getWeight() {
        return weight;
    }

    public enum PageUnitType {
        BITMAP,
        TEXT;

        private static PageUnitType value(String modeType){
            for (PageUnitType type : values()) {
                if (type.name().equals(modeType)) {
                    return type;
                }
            }
            return null;
        }
    }

    
    private static IPage.EAlign EAlignToEnum(String modeType){
        for (IPage.EAlign type : EAlignValues()) {
            if (type.name().equals(modeType)) {
                return type;
            }
        }
        return null;
    }

    public static IPage.EAlign[] EAlignValues(){
        return new IPage.EAlign[]{
                IPage.EAlign.LEFT,
                IPage.EAlign.CENTER,
                IPage.EAlign.RIGHT,

        };
    }

    public static enum EStyle {
        NORMAL(0),
        BOLD(1),
        UNDERLINE(2),
        BOLD_AND_UNDERLINE((EStyle.BOLD.value | EStyle.UNDERLINE.value) )
        ;
        private int value;
        EStyle(int i){
            this.value=i;
        }

        public int getVaule(){
            return value;
        }
        private static EStyle value(String style){
            for (EStyle type : values()) {
                if (type.name().equals(style)) {
                    return type;
                }
            }
            return null;
        }
    }
}
