package com.platform.plugs.live.responseEntity;

import com.alibaba.fastjson.annotation.JSONField;
import com.aliyuncs.live.model.v20161101.DescribeCasterComponentsResponse;
import lombok.Data;

import java.util.List;

/**
 * @Author TONG
 * @Date 2019/3/7 15:07
 **/
@Data
public class CasterComponent {

    /** 组件Id*/
    private String componentId;
    /** 组件名称，默认为组件ID*/
    private String componentName;
    /** 用于指定组件位置，每个位置至多设置一个组件，格式需符合“RC01…RC12”*/
    private String locationId;
    /** 组件类型，只能是预设值的一种: “text”、“image”、“caption”等*/
    private String componentType;
    /** 组件显示的特效。 none：无 animateH：水平滚动 animateV：垂直滚动*/
    private String effect;
    /** 组件Layer的尺寸，布局等信息*/
    private ComponentLayer componentLayer;
    /** Text元素属性*/
    private TextLayerContent textLayerContent;
    /** Image元素属性*/
    private ImageLayerContent imageLayerContent;
    /** Caption元素属性*/
    private CaptionLayerContent captionLayerContent;

    public static CasterComponent parse(DescribeCasterComponentsResponse.Component data) {
        CasterComponent component = new CasterComponent();
        component.setComponentId(data.getComponentId());
        component.setComponentName(data.getComponentName());
        component.setLocationId(data.getLocationId());
        component.setComponentType(data.getComponentType());
        component.setEffect(data.getEffect());
        if(data.getComponentLayer() != null)
            component.setComponentLayer(ComponentLayer.parse(data.getComponentLayer()));
        if(data.getTextLayerContent() != null)
            component.setTextLayerContent(TextLayerContent.parse(data.getTextLayerContent()));
        if(data.getImageLayerContent() != null)
            component.setImageLayerContent(ImageLayerContent.parse(data.getImageLayerContent()));
        if(data.getCaptionLayerContent() != null)
            component.setCaptionLayerContent(CaptionLayerContent.parse(data.getCaptionLayerContent()));
        return component;
    }

    @Data
    public static class ComponentLayer {
        /** 设置该layer元素的高度归一化比例值，其中元素的宽度会按照该高度来进行等比缩放。 默认值：0，表示按照元素的原始尺寸进行显示*/
        @JSONField(name="HeightNormalized")
        private Float heightNormalized;
        /** 设置该layer元素的宽度归一化比例值，其中元素的高度会按照该宽度来进行等比缩放。
         默认值：0，表示按照元素的原始尺寸进行显示。
         该字段和heightNormalized有冲突。
         一旦同时设置了heightNormalized和widthNormalized，只有heightNormalized生效。
         如果heightNormalized和widthNormalized设置只能同时设置一个，后面设置的值会影响前面的设置*/
        @JSONField(name="WidthNormalized")
        private Float widthNormalized;
        /** 设置该layer 元素的位置归一化值[x，y]。默认为：[0，0],x，y需要进行归一化计算。*/
        @JSONField(name="PositionRefer")
        private String positionRefer;
        /** 设置元素的position 参考坐标值。取值范围：”topLeft”、”topRight”、”bottomLeft”、”bottomRight”默认值：”topLeft”。*/
        @JSONField(name="PositionNormalized")
        private List<String> positionNormalized;

        public static ComponentLayer parse(DescribeCasterComponentsResponse.Component.ComponentLayer data) {
            ComponentLayer layer = new ComponentLayer();
            layer.setHeightNormalized(data.getHeightNormalized());
            layer.setWidthNormalized(data.getWidthNormalized());
            layer.setPositionNormalized(data.getPositionNormalizeds());
            layer.setPositionRefer(data.getPositionRefer());
            return layer;
        }
    }

    @Data
    public static class TextLayerContent {
        /** 文本内容默认为””*/
        @JSONField(name="Text")
        private String text;
        /** 文字色彩。取值：“0x000000-0xffffff”*/
        @JSONField(name="Color")
        private String color;
        /** 字体名字取系统预设值。
         默认楷体，“KaiTi”*/
        @JSONField(name="FontName")
        private String fontName;
        /** 字体归一化大小  字体设置大小为：”font_size/output_height”。 如果系统根据归一化方式反计算的出来的字体大小>1024, 取1024。默认值：-1，表示无效。*/
        @JSONField(name="SizeNormalized")
        private Float sizeNormalized;
        /** 文字边框宽度归一化值该归一化值是基于文字的size来计算的，即BorderWidth/FontSize。 如果系统归一化反计算出来的值超过16，取16。 默认值：0*/
        @JSONField(name="BorderWidthNormalized")
        private Float borderWidthNormalized;
        /** 文字边框色彩。取值：“0x000000-0xffffff” 默认：””，表示无效*/
        @JSONField(name="BorderColor")
        private String borderColor;

        public static TextLayerContent parse(DescribeCasterComponentsResponse.Component.TextLayerContent data) {
            TextLayerContent text = new TextLayerContent();
            text.setText(data.getText());
            text.setColor(data.getColor());
            text.setFontName(data.getFontName());
            text.setSizeNormalized(data.getSizeNormalized());
            text.setBorderWidthNormalized(data.getBorderWidthNormalized());
            text.setBorderColor(data.getBorderColor());
            return text;
        }
    }

    @Data
    public static class ImageLayerContent {
        /** 媒资库素材Id*/
        @JSONField(name="MaterialId")
        private String materialId;

        public static ImageLayerContent parse(DescribeCasterComponentsResponse.Component.ImageLayerContent data) {
            ImageLayerContent layer = new ImageLayerContent();
            layer.setMaterialId(data.getMaterialId());
            return layer;
        }
    }

    @Data
    public static class CaptionLayerContent {
        /** 组件类型为caption时，表示引用的视频源Location*/
        @JSONField(name="LocationId")
        private String locationId;
        /** 纠正当前字幕pts与语音pts偏差值。取值范围：[-10000, +10000] 默认值：0*/
        @JSONField(name="PtsOffset")
        private Integer ptsOffset;
        /** 显示字数，可配合字体大小调整。取值范围：[10,50] 默认值：35*/
        @JSONField(name="WordsCount")
        private Integer wordsCount;
        /** 文字色彩。取值：“0x000000-0xffffff”*/
        @JSONField(name="Color")
        private String color;
        /** 字体名字。 取系统预设值，默认楷体，“KaiTi”*/
        @JSONField(name="FontName")
        private String fontName;
        /** 字体归一化大小，字体设置大小为：”font_size/output_height”。如果系统根据归一化方式反计算的出来的字体大小>1024, 取1024。默认值：-1，表示无效。*/
        @JSONField(name="SizeNormalized")
        private Float sizeNormalized;
        /** 文字边框宽度归一化值。该归一化值是基于文字的size来计算的，即BorderWidth、FontSize。如果系统归一化反计算出来的值超过16，取16。默认值：0*/
        @JSONField(name="BorderWidthNormalized")
        private Float borderWidthNormalized;
        /** 文字边框色彩。取值：“0x000000-0xffffff”默认：””，表示无效*/
        @JSONField(name="BorderColor")
        private String borderColor;

        public static CaptionLayerContent parse(DescribeCasterComponentsResponse.Component.CaptionLayerContent data) {
            CaptionLayerContent caption = new CaptionLayerContent();
            caption.setLocationId(data.getLocationId());
            caption.setPtsOffset(data.getPtsOffset());
            caption.setWordsCount(data.getWordsCount());
            caption.setColor(data.getColor());
            caption.setFontName(data.getFontName());
            caption.setSizeNormalized(data.getSizeNormalized());
            caption.setBorderColor(data.getBorderColor());
            caption.setBorderWidthNormalized(data.getBorderWidthNormalized());
            return caption;
        }
    }
}
