package io.delphiplatform.api.v3.model.ads;

import com.fasterxml.jackson.annotation.JsonProperty;

import org.openapitools.jackson.nullable.JsonNullable;

import lombok.Data;

@Data
public abstract class AdCommonFinanceMetrics<T> {

    @JsonProperty("cp_click")
    private JsonNullable<T> cpClick = JsonNullable.undefined();

    @JsonProperty("cp_comment")
    private JsonNullable<T> cpComment = JsonNullable.undefined();

    @JsonProperty("cp_conversion")
    private JsonNullable<T> cpConversion = JsonNullable.undefined();

    @JsonProperty("cp_custom_conversion")
    private JsonNullable<T> cpCustomConversion = JsonNullable.undefined();

    @JsonProperty("cp_unique_conversion")
    private JsonNullable<T> cpUniqueConversion = JsonNullable.undefined();

    @JsonProperty("cp_engagement")
    private JsonNullable<T> cpEngagement = JsonNullable.undefined();

    @JsonProperty("cp_landing_page_view")
    private JsonNullable<T> cpLandingPageView = JsonNullable.undefined();

    @JsonProperty("cp_lead")
    private JsonNullable<T> cpLead = JsonNullable.undefined();

    @JsonProperty("cp_reaction")
    private JsonNullable<T> cpReaction = JsonNullable.undefined();

    @JsonProperty("cp_thruplay")
    private JsonNullable<T> cpThruplay = JsonNullable.undefined();

    @JsonProperty("cp_unique_click")
    private JsonNullable<T> cpUniqueClick = JsonNullable.undefined();

    @JsonProperty("cp_unique_custom_conversion")
    private JsonNullable<T> cpUniqueCustomConversion = JsonNullable.undefined();

    @JsonProperty("cp_unique_outbound_click")
    private JsonNullable<T> cpUniqueOutboundClick = JsonNullable.undefined();

    @JsonProperty("cp_video_view")
    private JsonNullable<T> cpVideoView = JsonNullable.undefined();

    @JsonProperty("cpm_impressions")
    private JsonNullable<T> cpmImpressions = JsonNullable.undefined();

    @JsonProperty("cpm_reach")
    private JsonNullable<T> cpmReach = JsonNullable.undefined();

    @JsonProperty("spend")
    private JsonNullable<T> spend = JsonNullable.undefined();

    @JsonProperty("currency")
    private JsonNullable<T> currency = JsonNullable.undefined();

    public AdCommonFinanceMetrics<T> currency(T value) {
        this.currency = JsonNullable.of(value);
        return this;
    }

    public AdCommonFinanceMetrics<T> cpClick(T cpClick) {
        this.cpClick = JsonNullable.of(cpClick);
        return this;
    }

    public AdCommonFinanceMetrics<T> cpComment(T cpComment) {
        this.cpComment = JsonNullable.of(cpComment);
        return this;
    }

    public AdCommonFinanceMetrics<T> cpConversion(T cpConversion) {
        this.cpConversion = JsonNullable.of(cpConversion);
        return this;
    }

    public AdCommonFinanceMetrics<T> cpCustomConversion(T cpCustomConversion) {
        this.cpCustomConversion = JsonNullable.of(cpCustomConversion);
        return this;
    }

    public AdCommonFinanceMetrics<T> cpUniqueConversion(T cpUniqueConversion) {
        this.cpUniqueConversion = JsonNullable.of(cpUniqueConversion);
        return this;
    }

    public AdCommonFinanceMetrics<T> cpEngagement(T cpEngagement) {
        this.cpEngagement = JsonNullable.of(cpEngagement);
        return this;
    }

    public AdCommonFinanceMetrics<T> cpLandingPageView(T cpLandingPageView) {
        this.cpLandingPageView = JsonNullable.of(cpLandingPageView);
        return this;
    }

    public AdCommonFinanceMetrics<T> cpLead(T cpLead) {
        this.cpLead = JsonNullable.of(cpLead);
        return this;
    }

    public AdCommonFinanceMetrics<T> cpReaction(T cpReaction) {
        this.cpReaction = JsonNullable.of(cpReaction);
        return this;
    }

    public AdCommonFinanceMetrics<T> cpThruplay(T cpThruplay) {
        this.cpThruplay = JsonNullable.of(cpThruplay);
        return this;
    }

    public AdCommonFinanceMetrics<T> cpUniqueClick(T cpUniqueClick) {
        this.cpUniqueClick = JsonNullable.of(cpUniqueClick);
        return this;
    }

    public AdCommonFinanceMetrics<T> cpUniqueCustomConversion(T cpUniqueCustomConversion) {
        this.cpUniqueCustomConversion = JsonNullable.of(cpUniqueCustomConversion);
        return this;
    }

    public AdCommonFinanceMetrics<T> cpUniqueOutboundClick(T cpUniqueOutboundClick) {
        this.cpUniqueOutboundClick = JsonNullable.of(cpUniqueOutboundClick);
        return this;
    }

    public AdCommonFinanceMetrics<T> cpVideoView(T cpVideoView) {
        this.cpVideoView = JsonNullable.of(cpVideoView);
        return this;
    }

    public AdCommonFinanceMetrics<T> cpmImpressions(T cpmImpressions) {
        this.cpmImpressions = JsonNullable.of(cpmImpressions);
        return this;
    }

    public AdCommonFinanceMetrics<T> cpmReach(T cpmReach) {
        this.cpmReach = JsonNullable.of(cpmReach);
        return this;
    }

    public AdCommonFinanceMetrics<T> spend(T spend) {
        this.spend = JsonNullable.of(spend);
        return this;
    }

}

