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

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

import org.openapitools.jackson.nullable.JsonNullable;

import java.util.Objects;

/**
 * YouTube Age Band dimension modeled as an aggregate metric exposing authenticated view percentages by age band.
 */
@JsonPropertyOrder(alphabetic = true)
public class YouTubeAgeBands {

    @JsonProperty("all_13_17")
    private JsonNullable<Float> all1317 = JsonNullable.undefined();

    @JsonProperty("all_18_24")
    private JsonNullable<Float> all1824 = JsonNullable.undefined();

    @JsonProperty("all_25_34")
    private JsonNullable<Float> all2534 = JsonNullable.undefined();

    @JsonProperty("all_35_44")
    private JsonNullable<Float> all3544 = JsonNullable.undefined();

    @JsonProperty("all_45_54")
    private JsonNullable<Float> all4554 = JsonNullable.undefined();

    @JsonProperty("all_55_64")
    private JsonNullable<Float> all5564 = JsonNullable.undefined();

    @JsonProperty("all_65_plus")
    private JsonNullable<Float> all65Plus = JsonNullable.undefined();

    @JsonProperty("female_13_17")
    private JsonNullable<Float> female1317 = JsonNullable.undefined();

    @JsonProperty("female_18_24")
    private JsonNullable<Float> female1824 = JsonNullable.undefined();

    @JsonProperty("female_25_34")
    private JsonNullable<Float> female2534 = JsonNullable.undefined();

    @JsonProperty("female_35_44")
    private JsonNullable<Float> female3544 = JsonNullable.undefined();

    @JsonProperty("female_45_54")
    private JsonNullable<Float> female4554 = JsonNullable.undefined();

    @JsonProperty("female_55_64")
    private JsonNullable<Float> female5564 = JsonNullable.undefined();

    @JsonProperty("female_65_plus")
    private JsonNullable<Float> female65Plus = JsonNullable.undefined();

    @JsonProperty("male_13_17")
    private JsonNullable<Float> male1317 = JsonNullable.undefined();

    @JsonProperty("male_18_24")
    private JsonNullable<Float> male1824 = JsonNullable.undefined();

    @JsonProperty("male_25_34")
    private JsonNullable<Float> male2534 = JsonNullable.undefined();

    @JsonProperty("male_35_44")
    private JsonNullable<Float> male3544 = JsonNullable.undefined();

    @JsonProperty("male_45_54")
    private JsonNullable<Float> male4554 = JsonNullable.undefined();

    @JsonProperty("male_55_64")
    private JsonNullable<Float> male5564 = JsonNullable.undefined();

    @JsonProperty("male_65_plus")
    private JsonNullable<Float> male65Plus = JsonNullable.undefined();

    @JsonProperty("unknown_13_17")
    private JsonNullable<Float> unknown1317 = JsonNullable.undefined();

    @JsonProperty("unknown_18_24")
    private JsonNullable<Float> unknown1824 = JsonNullable.undefined();

    @JsonProperty("unknown_25_34")
    private JsonNullable<Float> unknown2534 = JsonNullable.undefined();

    @JsonProperty("unknown_35_44")
    private JsonNullable<Float> unknown3544 = JsonNullable.undefined();

    @JsonProperty("unknown_45_54")
    private JsonNullable<Float> unknown4554 = JsonNullable.undefined();

    @JsonProperty("unknown_55_64")
    private JsonNullable<Float> unknown5564 = JsonNullable.undefined();

    @JsonProperty("unknown_65_plus")
    private JsonNullable<Float> unknown65Plus = JsonNullable.undefined();

    public YouTubeAgeBands all1317(Float all1317) {
        this.all1317 = JsonNullable.of(all1317);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return all1317
     */
    public JsonNullable<Float> getAll1317() {
        return all1317;
    }

    public void setAll1317(JsonNullable<Float> all1317) {
        this.all1317 = all1317;
    }

    public YouTubeAgeBands all1824(Float all1824) {
        this.all1824 = JsonNullable.of(all1824);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return all1824
     */
    public JsonNullable<Float> getAll1824() {
        return all1824;
    }

    public void setAll1824(JsonNullable<Float> all1824) {
        this.all1824 = all1824;
    }

    public YouTubeAgeBands all2534(Float all2534) {
        this.all2534 = JsonNullable.of(all2534);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return all2534
     */
    public JsonNullable<Float> getAll2534() {
        return all2534;
    }

    public void setAll2534(JsonNullable<Float> all2534) {
        this.all2534 = all2534;
    }

    public YouTubeAgeBands all3544(Float all3544) {
        this.all3544 = JsonNullable.of(all3544);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return all3544
     */
    public JsonNullable<Float> getAll3544() {
        return all3544;
    }

    public void setAll3544(JsonNullable<Float> all3544) {
        this.all3544 = all3544;
    }

    public YouTubeAgeBands all4554(Float all4554) {
        this.all4554 = JsonNullable.of(all4554);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return all4554
     */
    public JsonNullable<Float> getAll4554() {
        return all4554;
    }

    public void setAll4554(JsonNullable<Float> all4554) {
        this.all4554 = all4554;
    }

    public YouTubeAgeBands all5564(Float all5564) {
        this.all5564 = JsonNullable.of(all5564);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return all5564
     */
    public JsonNullable<Float> getAll5564() {
        return all5564;
    }

    public void setAll5564(JsonNullable<Float> all5564) {
        this.all5564 = all5564;
    }

    public YouTubeAgeBands all65Plus(Float all65Plus) {
        this.all65Plus = JsonNullable.of(all65Plus);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return all65Plus
     */
    public JsonNullable<Float> getAll65Plus() {
        return all65Plus;
    }

    public void setAll65Plus(JsonNullable<Float> all65Plus) {
        this.all65Plus = all65Plus;
    }

    public YouTubeAgeBands female1317(Float female1317) {
        this.female1317 = JsonNullable.of(female1317);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return female1317
     */
    public JsonNullable<Float> getFemale1317() {
        return female1317;
    }

    public void setFemale1317(JsonNullable<Float> female1317) {
        this.female1317 = female1317;
    }

    public YouTubeAgeBands female1824(Float female1824) {
        this.female1824 = JsonNullable.of(female1824);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return female1824
     */
    public JsonNullable<Float> getFemale1824() {
        return female1824;
    }

    public void setFemale1824(JsonNullable<Float> female1824) {
        this.female1824 = female1824;
    }

    public YouTubeAgeBands female2534(Float female2534) {
        this.female2534 = JsonNullable.of(female2534);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return female2534
     */
    public JsonNullable<Float> getFemale2534() {
        return female2534;
    }

    public void setFemale2534(JsonNullable<Float> female2534) {
        this.female2534 = female2534;
    }

    public YouTubeAgeBands female3544(Float female3544) {
        this.female3544 = JsonNullable.of(female3544);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return female3544
     */
    public JsonNullable<Float> getFemale3544() {
        return female3544;
    }

    public void setFemale3544(JsonNullable<Float> female3544) {
        this.female3544 = female3544;
    }

    public YouTubeAgeBands female4554(Float female4554) {
        this.female4554 = JsonNullable.of(female4554);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return female4554
     */
    public JsonNullable<Float> getFemale4554() {
        return female4554;
    }

    public void setFemale4554(JsonNullable<Float> female4554) {
        this.female4554 = female4554;
    }

    public YouTubeAgeBands female5564(Float female5564) {
        this.female5564 = JsonNullable.of(female5564);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return female5564
     */
    public JsonNullable<Float> getFemale5564() {
        return female5564;
    }

    public void setFemale5564(JsonNullable<Float> female5564) {
        this.female5564 = female5564;
    }

    public YouTubeAgeBands female65Plus(Float female65Plus) {
        this.female65Plus = JsonNullable.of(female65Plus);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return female65Plus
     */
    public JsonNullable<Float> getFemale65Plus() {
        return female65Plus;
    }

    public void setFemale65Plus(JsonNullable<Float> female65Plus) {
        this.female65Plus = female65Plus;
    }

    public YouTubeAgeBands male1317(Float male1317) {
        this.male1317 = JsonNullable.of(male1317);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return male1317
     */
    public JsonNullable<Float> getMale1317() {
        return male1317;
    }

    public void setMale1317(JsonNullable<Float> male1317) {
        this.male1317 = male1317;
    }

    public YouTubeAgeBands male1824(Float male1824) {
        this.male1824 = JsonNullable.of(male1824);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return male1824
     */
    public JsonNullable<Float> getMale1824() {
        return male1824;
    }

    public void setMale1824(JsonNullable<Float> male1824) {
        this.male1824 = male1824;
    }

    public YouTubeAgeBands male2534(Float male2534) {
        this.male2534 = JsonNullable.of(male2534);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return male2534
     */
    public JsonNullable<Float> getMale2534() {
        return male2534;
    }

    public void setMale2534(JsonNullable<Float> male2534) {
        this.male2534 = male2534;
    }

    public YouTubeAgeBands male3544(Float male3544) {
        this.male3544 = JsonNullable.of(male3544);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return male3544
     */
    public JsonNullable<Float> getMale3544() {
        return male3544;
    }

    public void setMale3544(JsonNullable<Float> male3544) {
        this.male3544 = male3544;
    }

    public YouTubeAgeBands male4554(Float male4554) {
        this.male4554 = JsonNullable.of(male4554);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return male4554
     */
    public JsonNullable<Float> getMale4554() {
        return male4554;
    }

    public void setMale4554(JsonNullable<Float> male4554) {
        this.male4554 = male4554;
    }

    public YouTubeAgeBands male5564(Float male5564) {
        this.male5564 = JsonNullable.of(male5564);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return male5564
     */
    public JsonNullable<Float> getMale5564() {
        return male5564;
    }

    public void setMale5564(JsonNullable<Float> male5564) {
        this.male5564 = male5564;
    }

    public YouTubeAgeBands male65Plus(Float male65Plus) {
        this.male65Plus = JsonNullable.of(male65Plus);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return male65Plus
     */
    public JsonNullable<Float> getMale65Plus() {
        return male65Plus;
    }

    public void setMale65Plus(JsonNullable<Float> male65Plus) {
        this.male65Plus = male65Plus;
    }

    public YouTubeAgeBands unknown1317(Float unknown1317) {
        this.unknown1317 = JsonNullable.of(unknown1317);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return unknown1317
     */
    public JsonNullable<Float> getUnknown1317() {
        return unknown1317;
    }

    public void setUnknown1317(JsonNullable<Float> unknown1317) {
        this.unknown1317 = unknown1317;
    }

    public YouTubeAgeBands unknown1824(Float unknown1824) {
        this.unknown1824 = JsonNullable.of(unknown1824);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return unknown1824
     */
    public JsonNullable<Float> getUnknown1824() {
        return unknown1824;
    }

    public void setUnknown1824(JsonNullable<Float> unknown1824) {
        this.unknown1824 = unknown1824;
    }

    public YouTubeAgeBands unknown2534(Float unknown2534) {
        this.unknown2534 = JsonNullable.of(unknown2534);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return unknown2534
     */
    public JsonNullable<Float> getUnknown2534() {
        return unknown2534;
    }

    public void setUnknown2534(JsonNullable<Float> unknown2534) {
        this.unknown2534 = unknown2534;
    }

    public YouTubeAgeBands unknown3544(Float unknown3544) {
        this.unknown3544 = JsonNullable.of(unknown3544);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return unknown3544
     */
    public JsonNullable<Float> getUnknown3544() {
        return unknown3544;
    }

    public void setUnknown3544(JsonNullable<Float> unknown3544) {
        this.unknown3544 = unknown3544;
    }

    public YouTubeAgeBands unknown4554(Float unknown4554) {
        this.unknown4554 = JsonNullable.of(unknown4554);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return unknown4554
     */
    public JsonNullable<Float> getUnknown4554() {
        return unknown4554;
    }

    public void setUnknown4554(JsonNullable<Float> unknown4554) {
        this.unknown4554 = unknown4554;
    }

    public YouTubeAgeBands unknown5564(Float unknown5564) {
        this.unknown5564 = JsonNullable.of(unknown5564);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return unknown5564
     */
    public JsonNullable<Float> getUnknown5564() {
        return unknown5564;
    }

    public void setUnknown5564(JsonNullable<Float> unknown5564) {
        this.unknown5564 = unknown5564;
    }

    public YouTubeAgeBands unknown65Plus(Float unknown65Plus) {
        this.unknown65Plus = JsonNullable.of(unknown65Plus);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed by a user who is logged in (authenticated). `null` if data
     * is missing.
     *
     * @return unknown65Plus
     */
    public JsonNullable<Float> getUnknown65Plus() {
        return unknown65Plus;
    }

    public void setUnknown65Plus(JsonNullable<Float> unknown65Plus) {
        this.unknown65Plus = unknown65Plus;
    }

    @Override
    public boolean equals(java.lang.Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        YouTubeAgeBands youTubeAgeBands = (YouTubeAgeBands) o;
        return Objects.equals(this.all1317, youTubeAgeBands.all1317) &&
            Objects.equals(this.all1824, youTubeAgeBands.all1824) &&
            Objects.equals(this.all2534, youTubeAgeBands.all2534) &&
            Objects.equals(this.all3544, youTubeAgeBands.all3544) &&
            Objects.equals(this.all4554, youTubeAgeBands.all4554) &&
            Objects.equals(this.all5564, youTubeAgeBands.all5564) &&
            Objects.equals(this.all65Plus, youTubeAgeBands.all65Plus) &&
            Objects.equals(this.female1317, youTubeAgeBands.female1317) &&
            Objects.equals(this.female1824, youTubeAgeBands.female1824) &&
            Objects.equals(this.female2534, youTubeAgeBands.female2534) &&
            Objects.equals(this.female3544, youTubeAgeBands.female3544) &&
            Objects.equals(this.female4554, youTubeAgeBands.female4554) &&
            Objects.equals(this.female5564, youTubeAgeBands.female5564) &&
            Objects.equals(this.female65Plus, youTubeAgeBands.female65Plus) &&
            Objects.equals(this.male1317, youTubeAgeBands.male1317) &&
            Objects.equals(this.male1824, youTubeAgeBands.male1824) &&
            Objects.equals(this.male2534, youTubeAgeBands.male2534) &&
            Objects.equals(this.male3544, youTubeAgeBands.male3544) &&
            Objects.equals(this.male4554, youTubeAgeBands.male4554) &&
            Objects.equals(this.male5564, youTubeAgeBands.male5564) &&
            Objects.equals(this.male65Plus, youTubeAgeBands.male65Plus) &&
            Objects.equals(this.unknown1317, youTubeAgeBands.unknown1317) &&
            Objects.equals(this.unknown1824, youTubeAgeBands.unknown1824) &&
            Objects.equals(this.unknown2534, youTubeAgeBands.unknown2534) &&
            Objects.equals(this.unknown3544, youTubeAgeBands.unknown3544) &&
            Objects.equals(this.unknown4554, youTubeAgeBands.unknown4554) &&
            Objects.equals(this.unknown5564, youTubeAgeBands.unknown5564) &&
            Objects.equals(this.unknown65Plus, youTubeAgeBands.unknown65Plus);
    }

    @Override
    public int hashCode() {
        return Objects
            .hash(all1317, all1824, all2534, all3544, all4554, all5564, all65Plus, female1317, female1824,
                female2534, female3544, female4554, female5564, female65Plus, male1317, male1824,
                male2534, male3544, male4554, male5564, male65Plus, unknown1317, unknown1824, unknown2534,
                unknown3544, unknown4554, unknown5564, unknown65Plus);
    }

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

        sb.append("    all1317: ").append(toIndentedString(all1317)).append("\n");
        sb.append("    all1824: ").append(toIndentedString(all1824)).append("\n");
        sb.append("    all2534: ").append(toIndentedString(all2534)).append("\n");
        sb.append("    all3544: ").append(toIndentedString(all3544)).append("\n");
        sb.append("    all4554: ").append(toIndentedString(all4554)).append("\n");
        sb.append("    all5564: ").append(toIndentedString(all5564)).append("\n");
        sb.append("    all65Plus: ").append(toIndentedString(all65Plus)).append("\n");
        sb.append("    female1317: ").append(toIndentedString(female1317)).append("\n");
        sb.append("    female1824: ").append(toIndentedString(female1824)).append("\n");
        sb.append("    female2534: ").append(toIndentedString(female2534)).append("\n");
        sb.append("    female3544: ").append(toIndentedString(female3544)).append("\n");
        sb.append("    female4554: ").append(toIndentedString(female4554)).append("\n");
        sb.append("    female5564: ").append(toIndentedString(female5564)).append("\n");
        sb.append("    female65Plus: ").append(toIndentedString(female65Plus)).append("\n");
        sb.append("    male1317: ").append(toIndentedString(male1317)).append("\n");
        sb.append("    male1824: ").append(toIndentedString(male1824)).append("\n");
        sb.append("    male2534: ").append(toIndentedString(male2534)).append("\n");
        sb.append("    male3544: ").append(toIndentedString(male3544)).append("\n");
        sb.append("    male4554: ").append(toIndentedString(male4554)).append("\n");
        sb.append("    male5564: ").append(toIndentedString(male5564)).append("\n");
        sb.append("    male65Plus: ").append(toIndentedString(male65Plus)).append("\n");
        sb.append("    unknown1317: ").append(toIndentedString(unknown1317)).append("\n");
        sb.append("    unknown1824: ").append(toIndentedString(unknown1824)).append("\n");
        sb.append("    unknown2534: ").append(toIndentedString(unknown2534)).append("\n");
        sb.append("    unknown3544: ").append(toIndentedString(unknown3544)).append("\n");
        sb.append("    unknown4554: ").append(toIndentedString(unknown4554)).append("\n");
        sb.append("    unknown5564: ").append(toIndentedString(unknown5564)).append("\n");
        sb.append("    unknown65Plus: ").append(toIndentedString(unknown65Plus)).append("\n");
        sb.append("}");
        return sb.toString();
    }

    /**
     * Convert the given object to string with each line indented by 4 spaces (except the first line).
     */
    private String toIndentedString(Object o) {
        if (o == null) {
            return "null";
        }
        return o.toString().replace("\n", "\n    ");
    }
}

