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

import com.fasterxml.jackson.annotation.JsonProperty;

import org.openapitools.jackson.nullable.JsonNullable;

import java.math.BigDecimal;
import java.util.Objects;

public class AdMetricsGeneral {

    @JsonProperty("average_frequency")
    private JsonNullable<BigDecimal> averageFrequency = JsonNullable.undefined();

    @JsonProperty("clicks")
    private JsonNullable<Long> clicks = JsonNullable.undefined();

    @JsonProperty("comments")
    private JsonNullable<Long> comments = JsonNullable.undefined();

    @JsonProperty("tiktok_comments")
    private JsonNullable<Long> tiktokComments = JsonNullable.undefined();

    @JsonProperty("tiktok_likes")
    private JsonNullable<Long> tiktokLikes = JsonNullable.undefined();

    @JsonProperty("tiktok_follows")
    private JsonNullable<Long> tiktokFollows = JsonNullable.undefined();

    @JsonProperty("tiktok_shares")
    private JsonNullable<Long> tiktokShares = JsonNullable.undefined();

    @JsonProperty("conversion_rate")
    private JsonNullable<BigDecimal> conversionRate = JsonNullable.undefined();

    @JsonProperty("conversions")
    private JsonNullable<Long> conversions = JsonNullable.undefined();

    @JsonProperty("ctr")
    private JsonNullable<BigDecimal> ctr = JsonNullable.undefined();

    @JsonProperty("custom_conversions")
    private JsonNullable<Long> customConversions = JsonNullable.undefined();

    @JsonProperty("engagements")
    private JsonNullable<Long> engagements = JsonNullable.undefined();

    @JsonProperty("facebook_page_likes")
    private JsonNullable<Long> facebookPageLikes = JsonNullable.undefined();

    @JsonProperty("impressions")
    private JsonNullable<Long> impressions = JsonNullable.undefined();

    @JsonProperty("landing_page_views")
    private JsonNullable<Long> landingPageViews = JsonNullable.undefined();

    @JsonProperty("leads")
    private JsonNullable<Long> leads = JsonNullable.undefined();

    @JsonProperty("reach")
    private JsonNullable<Long> reach = JsonNullable.undefined();

    @JsonProperty("reactions")
    private JsonNullable<Long> reactions = JsonNullable.undefined();

    @JsonProperty("unique_clicks")
    private JsonNullable<Long> uniqueClicks = JsonNullable.undefined();

    @JsonProperty("unique_ctr")
    private JsonNullable<BigDecimal> uniqueCtr = JsonNullable.undefined();

    @JsonProperty("unique_custom_conv")
    private JsonNullable<Long> uniqueCustomConv = JsonNullable.undefined();

    @JsonProperty("unique_conv")
    private JsonNullable<Long> uniqueConv = JsonNullable.undefined();

    @JsonProperty("unique_outbound_clicks")
    private JsonNullable<Long> uniqueOutboundClicks = JsonNullable.undefined();

    @JsonProperty("unique_outbound_ctr")
    private JsonNullable<BigDecimal> uniqueOutboundCtr = JsonNullable.undefined();

    public AdMetricsGeneral averageFrequency(BigDecimal averageFrequency) {
        this.averageFrequency = JsonNullable.of(averageFrequency);
        return this;
    }


    public JsonNullable<BigDecimal> getAverageFrequency() {
        return averageFrequency;
    }

    public void setAverageFrequency(JsonNullable<BigDecimal> averageFrequency) {
        this.averageFrequency = averageFrequency;
    }

    public AdMetricsGeneral clicks(Long clicks) {
        this.clicks = JsonNullable.of(clicks);
        return this;
    }


    public JsonNullable<Long> getClicks() {
        return clicks;
    }

    public void setClicks(JsonNullable<Long> clicks) {
        this.clicks = clicks;
    }

    public AdMetricsGeneral comments(Long comments) {
        this.comments = JsonNullable.of(comments);
        return this;
    }


    public JsonNullable<Long> getComments() {
        return comments;
    }

    public void setComments(JsonNullable<Long> comments) {
        this.comments = comments;
    }

    public AdMetricsGeneral tiktokComments(Long tiktokComments) {
        this.tiktokComments = JsonNullable.of(tiktokComments);
        return this;
    }

    public JsonNullable<Long> getTiktokComments() {
        return tiktokComments;
    }

    public void setTiktokComments(JsonNullable<Long> tiktokComments) {
        this.tiktokComments = tiktokComments;
    }

    public AdMetricsGeneral tiktokLikes(Long tiktokLikes) {
        this.tiktokLikes = JsonNullable.of(tiktokLikes);
        return this;
    }

    public JsonNullable<Long> getTiktokLikes() {
        return tiktokLikes;
    }

    public void setTiktokLikes(JsonNullable<Long> tiktokLikes) {
        this.tiktokLikes = tiktokLikes;
    }

    public AdMetricsGeneral tiktokFollows(Long tiktokFollows) {
        this.tiktokFollows = JsonNullable.of(tiktokFollows);
        return this;
    }

    public JsonNullable<Long> getTiktokFollows() {
        return tiktokFollows;
    }

    public void setTiktokFollows(JsonNullable<Long> tiktokFollows) {
        this.tiktokFollows = tiktokFollows;
    }

    public AdMetricsGeneral tiktokShares(Long tiktokShares) {
        this.tiktokShares = JsonNullable.of(tiktokShares);
        return this;
    }

    public JsonNullable<Long> getTiktokShares() {
        return tiktokShares;
    }

    public void setTiktokShares(JsonNullable<Long> tiktokShares) {
        this.tiktokShares = tiktokShares;
    }

    public AdMetricsGeneral conversionRate(BigDecimal conversionRate) {
        this.conversionRate = JsonNullable.of(conversionRate);
        return this;
    }


    public JsonNullable<BigDecimal> getConversionRate() {
        return conversionRate;
    }

    public void setConversionRate(JsonNullable<BigDecimal> conversionRate) {
        this.conversionRate = conversionRate;
    }

    public AdMetricsGeneral conversions(Long conversions) {
        this.conversions = JsonNullable.of(conversions);
        return this;
    }


    public JsonNullable<Long> getConversions() {
        return conversions;
    }

    public void setConversions(JsonNullable<Long> conversions) {
        this.conversions = conversions;
    }

    public AdMetricsGeneral ctr(BigDecimal ctr) {
        this.ctr = JsonNullable.of(ctr);
        return this;
    }


    public JsonNullable<BigDecimal> getCtr() {
        return ctr;
    }

    public void setCtr(JsonNullable<BigDecimal> ctr) {
        this.ctr = ctr;
    }

    public AdMetricsGeneral customConversions(Long customConversions) {
        this.customConversions = JsonNullable.of(customConversions);
        return this;
    }


    public JsonNullable<Long> getCustomConversions() {
        return customConversions;
    }

    public void setCustomConversions(JsonNullable<Long> customConversions) {
        this.customConversions = customConversions;
    }

    public AdMetricsGeneral engagements(Long engagements) {
        this.engagements = JsonNullable.of(engagements);
        return this;
    }


    public JsonNullable<Long> getEngagements() {
        return engagements;
    }

    public void setEngagements(JsonNullable<Long> engagements) {
        this.engagements = engagements;
    }

    public AdMetricsGeneral facebookPageLikes(Long facebookPageLikes) {
        this.facebookPageLikes = JsonNullable.of(facebookPageLikes);
        return this;
    }


    public JsonNullable<Long> getFacebookPageLikes() {
        return facebookPageLikes;
    }

    public void setFacebookPageLikes(JsonNullable<Long> facebookPageLikes) {
        this.facebookPageLikes = facebookPageLikes;
    }

    public AdMetricsGeneral impressions(Long impressions) {
        this.impressions = JsonNullable.of(impressions);
        return this;
    }


    public JsonNullable<Long> getImpressions() {
        return impressions;
    }

    public void setImpressions(JsonNullable<Long> impressions) {
        this.impressions = impressions;
    }

    public AdMetricsGeneral landingPageViews(Long landingPageViews) {
        this.landingPageViews = JsonNullable.of(landingPageViews);
        return this;
    }


    public JsonNullable<Long> getLandingPageViews() {
        return landingPageViews;
    }

    public void setLandingPageViews(JsonNullable<Long> landingPageViews) {
        this.landingPageViews = landingPageViews;
    }

    public AdMetricsGeneral leads(Long leads) {
        this.leads = JsonNullable.of(leads);
        return this;
    }


    public JsonNullable<Long> getLeads() {
        return leads;
    }

    public void setLeads(JsonNullable<Long> leads) {
        this.leads = leads;
    }

    public AdMetricsGeneral reach(Long reach) {
        this.reach = JsonNullable.of(reach);
        return this;
    }


    public JsonNullable<Long> getReach() {
        return reach;
    }

    public void setReach(JsonNullable<Long> reach) {
        this.reach = reach;
    }

    public AdMetricsGeneral reactions(Long reactions) {
        this.reactions = JsonNullable.of(reactions);
        return this;
    }


    public JsonNullable<Long> getReactions() {
        return reactions;
    }

    public void setReactions(JsonNullable<Long> reactions) {
        this.reactions = reactions;
    }

    public AdMetricsGeneral uniqueClicks(Long uniqueClicks) {
        this.uniqueClicks = JsonNullable.of(uniqueClicks);
        return this;
    }


    public JsonNullable<Long> getUniqueClicks() {
        return uniqueClicks;
    }

    public void setUniqueClicks(JsonNullable<Long> uniqueClicks) {
        this.uniqueClicks = uniqueClicks;
    }

    public AdMetricsGeneral uniqueCtr(BigDecimal uniqueCtr) {
        this.uniqueCtr = JsonNullable.of(uniqueCtr);
        return this;
    }


    public JsonNullable<BigDecimal> getUniqueCtr() {
        return uniqueCtr;
    }

    public void setUniqueCtr(JsonNullable<BigDecimal> uniqueCtr) {
        this.uniqueCtr = uniqueCtr;
    }

    public AdMetricsGeneral uniqueCustomConv(Long uniqueCustomConv) {
        this.uniqueCustomConv = JsonNullable.of(uniqueCustomConv);
        return this;
    }


    public JsonNullable<Long> getUniqueCustomConv() {
        return uniqueCustomConv;
    }

    public void setUniqueCustomConv(JsonNullable<Long> uniqueCustomConv) {
        this.uniqueCustomConv = uniqueCustomConv;
    }

    public AdMetricsGeneral uniqueConv(Long uniqueConv) {
        this.uniqueConv = JsonNullable.of(uniqueConv);
        return this;
    }


    public JsonNullable<Long> getUniqueConv() {
        return uniqueConv;
    }

    public void setUniqueConv(JsonNullable<Long> uniqueConv) {
        this.uniqueConv = uniqueConv;
    }

    public AdMetricsGeneral uniqueOutboundClicks(Long uniqueOutboundClicks) {
        this.uniqueOutboundClicks = JsonNullable.of(uniqueOutboundClicks);
        return this;
    }


    public JsonNullable<Long> getUniqueOutboundClicks() {
        return uniqueOutboundClicks;
    }

    public void setUniqueOutboundClicks(JsonNullable<Long> uniqueOutboundClicks) {
        this.uniqueOutboundClicks = uniqueOutboundClicks;
    }

    public AdMetricsGeneral uniqueOutboundCtr(BigDecimal uniqueOutboundCtr) {
        this.uniqueOutboundCtr = JsonNullable.of(uniqueOutboundCtr);
        return this;
    }


    public JsonNullable<BigDecimal> getUniqueOutboundCtr() {
        return uniqueOutboundCtr;
    }

    public void setUniqueOutboundCtr(JsonNullable<BigDecimal> uniqueOutboundCtr) {
        this.uniqueOutboundCtr = uniqueOutboundCtr;
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        AdMetricsGeneral adMetricsGeneral = (AdMetricsGeneral) o;
        return Objects.equals(this.averageFrequency, adMetricsGeneral.averageFrequency) &&
            Objects.equals(this.clicks, adMetricsGeneral.clicks) &&
            Objects.equals(this.comments, adMetricsGeneral.comments) &&
            Objects.equals(this.conversionRate, adMetricsGeneral.conversionRate) &&
            Objects.equals(this.conversions, adMetricsGeneral.conversions) &&
            Objects.equals(this.ctr, adMetricsGeneral.ctr) &&
            Objects.equals(this.customConversions, adMetricsGeneral.customConversions) &&
            Objects.equals(this.engagements, adMetricsGeneral.engagements) &&
            Objects.equals(this.facebookPageLikes, adMetricsGeneral.facebookPageLikes) &&
            Objects.equals(this.impressions, adMetricsGeneral.impressions) &&
            Objects.equals(this.landingPageViews, adMetricsGeneral.landingPageViews) &&
            Objects.equals(this.leads, adMetricsGeneral.leads) &&
            Objects.equals(this.reach, adMetricsGeneral.reach) &&
            Objects.equals(this.reactions, adMetricsGeneral.reactions) &&
            Objects.equals(this.uniqueClicks, adMetricsGeneral.uniqueClicks) &&
            Objects.equals(this.uniqueCtr, adMetricsGeneral.uniqueCtr) &&
            Objects.equals(this.uniqueCustomConv, adMetricsGeneral.uniqueCustomConv) &&
            Objects.equals(this.uniqueOutboundClicks, adMetricsGeneral.uniqueOutboundClicks) &&
            Objects.equals(this.uniqueOutboundCtr, adMetricsGeneral.uniqueOutboundCtr);
    }

    @Override
    public int hashCode() {
        return Objects
            .hash(averageFrequency, clicks, comments, conversionRate, conversions, ctr, customConversions, engagements,
                facebookPageLikes, impressions, landingPageViews, leads, reach, reactions, uniqueClicks, uniqueCtr,
                uniqueCustomConv, uniqueOutboundClicks, uniqueOutboundCtr);
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("class AdMetricsGeneral {\n");

        sb.append("    averageFrequency: ").append(toIndentedString(averageFrequency)).append("\n");
        sb.append("    clicks: ").append(toIndentedString(clicks)).append("\n");
        sb.append("    comments: ").append(toIndentedString(comments)).append("\n");
        sb.append("    conversionRate: ").append(toIndentedString(conversionRate)).append("\n");
        sb.append("    conversions: ").append(toIndentedString(conversions)).append("\n");
        sb.append("    ctr: ").append(toIndentedString(ctr)).append("\n");
        sb.append("    customConversions: ").append(toIndentedString(customConversions)).append("\n");
        sb.append("    engagements: ").append(toIndentedString(engagements)).append("\n");
        sb.append("    facebookPageLikes: ").append(toIndentedString(facebookPageLikes)).append("\n");
        sb.append("    impressions: ").append(toIndentedString(impressions)).append("\n");
        sb.append("    landingPageViews: ").append(toIndentedString(landingPageViews)).append("\n");
        sb.append("    leads: ").append(toIndentedString(leads)).append("\n");
        sb.append("    reach: ").append(toIndentedString(reach)).append("\n");
        sb.append("    reactions: ").append(toIndentedString(reactions)).append("\n");
        sb.append("    uniqueClicks: ").append(toIndentedString(uniqueClicks)).append("\n");
        sb.append("    uniqueCtr: ").append(toIndentedString(uniqueCtr)).append("\n");
        sb.append("    uniqueCustomConv: ").append(toIndentedString(uniqueCustomConv)).append("\n");
        sb.append("    uniqueOutboundClicks: ").append(toIndentedString(uniqueOutboundClicks)).append("\n");
        sb.append("    uniqueOutboundCtr: ").append(toIndentedString(uniqueOutboundCtr)).append("\n");
        sb.append("}");
        return sb.toString();
    }

    private String toIndentedString(Object o) {
        if (o == null) {
            return "null";
        }
        return o.toString().replace("\n", "\n    ");
    }
}

