package com.fs.baidu.vo;

import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;

@Data
public class ReportVO {

    // ------------------------ 属性-属性数据 ------------------------

    /** 日期，格式示例：DAY: 2021-03-31；HOUR: 2021-03-31 23:00；WEEK/MONTH/SUMMARY: 2021-03-01至2021-03-31 */
    private LocalDate date;

    /** 账户ID */
    private Long userId;

    /** 账户名称 */
    private String userName;

    /** 推广计划（含已删除标记，如“推广计划[已删除]”） */
    private String campaignNameStatus;

    /** 推广单元（含已删除标记，如“推广单元[已删除]”） */
    private String adGroupNameStatus;

    /** 创意组合信息（嵌套结构） */
    private String ideaInfo;

    /** 创意名称（含已删除标记，如“创意名称[已删除]”） */
    private String ideaNameStatus;

    /** Feed主题类型，枚举：0-全部，1-网站链接，10-百家号推广... */
    private FeedSubjectEnum feedSubjectEnum;

    // ------------------------ 效果指标-基础指标 ------------------------

    /** 展现次数 */
    private Long impression;

    /** 点击次数 */
    private Long click;

    /** 消费金额 */
    private BigDecimal cost;

    /** 点击率 */
    private BigDecimal ctr;

    /** 平均点击价格 */
    private BigDecimal cpc;

    /** 千次展现消费 */
    private BigDecimal cpm;

    /** IAA广告变现LTV */
    private BigDecimal iaaCost;

    /** IAA广告变现ROI */
    private BigDecimal iaaPayRoi;

    /** 组件点击次数（创意按钮点击） */
    private Long phoneButtonClicks;

    /** 互动次数（视频广告含播放互动） */
    private Long interaction;

    // ------------------------ 枚举定义 ------------------------

    /** 是否共服枚举 */
    public enum OrgIsMultiServed {
        NO(0, "否"),
        YES(1, "是");

        private final Integer key;
        private final String value;

        OrgIsMultiServed(Integer key, String value) {
            this.key = key;
            this.value = value;
        }

        public static OrgIsMultiServed fromKey(Integer key) {
            for (OrgIsMultiServed e : values()) {
                if (e.key.equals(key)) return e;
            }
            return null;
        }
    }

    /** 是否内部账户枚举 */
    public enum UcIsInner {
        NO(0, "否"),
        YES(1, "是");

        private final Integer key;
        private final String value;

        UcIsInner(Integer key, String value) {
            this.key = key;
            this.value = value;
        }

        public static UcIsInner fromKey(Integer key) {
            for (UcIsInner e : values()) {
                if (e.key.equals(key)) return e;
            }
            return null;
        }
    }

    /** Feed主题枚举 */
    public enum FeedSubjectEnum {
        ALL(0, "全部"),
        WEBSITE(1, "网站链接"),
        BAIJIA_HAO(10, "百家号推广"),
        IOS_APP(2, "应用推广(iOS)"),
        ANDROID_APP(3, "应用推广(Android)"),
        MINI_PROGRAM(4, "小程序"),
        PRODUCT_CATALOG(5, "商品目录"),
        STORE(6, "门店推广"),
        ECOMMERCE(7, "电商店铺"),
        SALES_LEAD(8, "销售线索"),
        APP_LAUNCH(9, "应用推广(应用调起)");

        private final Integer key;
        private final String value;

        FeedSubjectEnum(Integer key, String value) {
            this.key = key;
            this.value = value;
        }

        public static FeedSubjectEnum fromKey(Integer key) {
            for (FeedSubjectEnum e : values()) {
                if (e.key.equals(key)) return e;
            }
            return null;
        }

        public String getValue() {
            return value;
        }
    }

    // ------------------------ 组合列嵌套类 ------------------------

}