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;

/**
 * This dimension identifies the software system of the device on which the view occurred.
 */
@JsonPropertyOrder(alphabetic = true)
public class YouTubeOperatingSystem {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    public YouTubeOperatingSystem android(Long android) {
        this.android = JsonNullable.of(android);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return android
     */
    public JsonNullable<Long> getAndroid() {
        return android;
    }

    public void setAndroid(JsonNullable<Long> android) {
        this.android = android;
    }

    public YouTubeOperatingSystem appleTvos(Long appleTvos) {
        this.appleTvos = JsonNullable.of(appleTvos);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return appleTvos
     */
    public JsonNullable<Long> getAppleTvos() {
        return appleTvos;
    }

    public void setAppleTvos(JsonNullable<Long> appleTvos) {
        this.appleTvos = appleTvos;
    }

    public YouTubeOperatingSystem bada(Long bada) {
        this.bada = JsonNullable.of(bada);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return bada
     */
    public JsonNullable<Long> getBada() {
        return bada;
    }

    public void setBada(JsonNullable<Long> bada) {
        this.bada = bada;
    }

    public YouTubeOperatingSystem blackberry(Long blackberry) {
        this.blackberry = JsonNullable.of(blackberry);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return blackberry
     */
    public JsonNullable<Long> getBlackberry() {
        return blackberry;
    }

    public void setBlackberry(JsonNullable<Long> blackberry) {
        this.blackberry = blackberry;
    }

    public YouTubeOperatingSystem chromeOs(Long chromeOs) {
        this.chromeOs = JsonNullable.of(chromeOs);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return chromeOs
     */
    public JsonNullable<Long> getChromeOs() {
        return chromeOs;
    }

    public void setChromeOs(JsonNullable<Long> chromeOs) {
        this.chromeOs = chromeOs;
    }

    public YouTubeOperatingSystem chromecast(Long chromecast) {
        this.chromecast = JsonNullable.of(chromecast);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return chromecast
     */
    public JsonNullable<Long> getChromecast() {
        return chromecast;
    }

    public void setChromecast(JsonNullable<Long> chromecast) {
        this.chromecast = chromecast;
    }

    public YouTubeOperatingSystem fireOs(Long fireOs) {
        this.fireOs = JsonNullable.of(fireOs);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return fireOs
     */
    public JsonNullable<Long> getFireOs() {
        return fireOs;
    }

    public void setFireOs(JsonNullable<Long> fireOs) {
        this.fireOs = fireOs;
    }

    public YouTubeOperatingSystem firefox(Long firefox) {
        this.firefox = JsonNullable.of(firefox);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return firefox
     */
    public JsonNullable<Long> getFirefox() {
        return firefox;
    }

    public void setFirefox(JsonNullable<Long> firefox) {
        this.firefox = firefox;
    }

    public YouTubeOperatingSystem hiptop(Long hiptop) {
        this.hiptop = JsonNullable.of(hiptop);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return hiptop
     */
    public JsonNullable<Long> getHiptop() {
        return hiptop;
    }

    public void setHiptop(JsonNullable<Long> hiptop) {
        this.hiptop = hiptop;
    }

    public YouTubeOperatingSystem ios(Long ios) {
        this.ios = JsonNullable.of(ios);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return ios
     */
    public JsonNullable<Long> getIos() {
        return ios;
    }

    public void setIos(JsonNullable<Long> ios) {
        this.ios = ios;
    }

    public YouTubeOperatingSystem kaios(Long kaios) {
        this.kaios = JsonNullable.of(kaios);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return kaios
     */
    public JsonNullable<Long> getKaios() {
        return kaios;
    }

    public void setKaios(JsonNullable<Long> kaios) {
        this.kaios = kaios;
    }

    public YouTubeOperatingSystem linux(Long linux) {
        this.linux = JsonNullable.of(linux);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return linux
     */
    public JsonNullable<Long> getLinux() {
        return linux;
    }

    public void setLinux(JsonNullable<Long> linux) {
        this.linux = linux;
    }

    public YouTubeOperatingSystem mac(Long mac) {
        this.mac = JsonNullable.of(mac);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return mac
     */
    public JsonNullable<Long> getMac() {
        return mac;
    }

    public void setMac(JsonNullable<Long> mac) {
        this.mac = mac;
    }

    public YouTubeOperatingSystem meego(Long meego) {
        this.meego = JsonNullable.of(meego);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return meego
     */
    public JsonNullable<Long> getMeego() {
        return meego;
    }

    public void setMeego(JsonNullable<Long> meego) {
        this.meego = meego;
    }

    public YouTubeOperatingSystem nintendo3ds(Long nintendo3ds) {
        this.nintendo3ds = JsonNullable.of(nintendo3ds);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return nintendo3ds
     */
    public JsonNullable<Long> getNintendo3ds() {
        return nintendo3ds;
    }

    public void setNintendo3ds(JsonNullable<Long> nintendo3ds) {
        this.nintendo3ds = nintendo3ds;
    }

    public YouTubeOperatingSystem nintendoSwitch(Long nintendoSwitch) {
        this.nintendoSwitch = JsonNullable.of(nintendoSwitch);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return nintendoSwitch
     */
    public JsonNullable<Long> getNintendoSwitch() {
        return nintendoSwitch;
    }

    public void setNintendoSwitch(JsonNullable<Long> nintendoSwitch) {
        this.nintendoSwitch = nintendoSwitch;
    }

    public YouTubeOperatingSystem other(Long other) {
        this.other = JsonNullable.of(other);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return other
     */
    public JsonNullable<Long> getOther() {
        return other;
    }

    public void setOther(JsonNullable<Long> other) {
        this.other = other;
    }

    public YouTubeOperatingSystem playstation(Long playstation) {
        this.playstation = JsonNullable.of(playstation);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return playstation
     */
    public JsonNullable<Long> getPlaystation() {
        return playstation;
    }

    public void setPlaystation(JsonNullable<Long> playstation) {
        this.playstation = playstation;
    }

    public YouTubeOperatingSystem playstationVita(Long playstationVita) {
        this.playstationVita = JsonNullable.of(playstationVita);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return playstationVita
     */
    public JsonNullable<Long> getPlaystationVita() {
        return playstationVita;
    }

    public void setPlaystationVita(JsonNullable<Long> playstationVita) {
        this.playstationVita = playstationVita;
    }

    public YouTubeOperatingSystem realmedia(Long realmedia) {
        this.realmedia = JsonNullable.of(realmedia);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return realmedia
     */
    public JsonNullable<Long> getRealmedia() {
        return realmedia;
    }

    public void setRealmedia(JsonNullable<Long> realmedia) {
        this.realmedia = realmedia;
    }

    public YouTubeOperatingSystem roku(Long roku) {
        this.roku = JsonNullable.of(roku);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return roku
     */
    public JsonNullable<Long> getRoku() {
        return roku;
    }

    public void setRoku(JsonNullable<Long> roku) {
        this.roku = roku;
    }

    public YouTubeOperatingSystem smartTv(Long smartTv) {
        this.smartTv = JsonNullable.of(smartTv);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return smartTv
     */
    public JsonNullable<Long> getSmartTv() {
        return smartTv;
    }

    public void setSmartTv(JsonNullable<Long> smartTv) {
        this.smartTv = smartTv;
    }

    public YouTubeOperatingSystem symbian(Long symbian) {
        this.symbian = JsonNullable.of(symbian);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return symbian
     */
    public JsonNullable<Long> getSymbian() {
        return symbian;
    }

    public void setSymbian(JsonNullable<Long> symbian) {
        this.symbian = symbian;
    }

    public YouTubeOperatingSystem tizen(Long tizen) {
        this.tizen = JsonNullable.of(tizen);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return tizen
     */
    public JsonNullable<Long> getTizen() {
        return tizen;
    }

    public void setTizen(JsonNullable<Long> tizen) {
        this.tizen = tizen;
    }

    public YouTubeOperatingSystem unknown(Long unknown) {
        this.unknown = JsonNullable.of(unknown);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return unknown
     */
    public JsonNullable<Long> getUnknown() {
        return unknown;
    }

    public void setUnknown(JsonNullable<Long> unknown) {
        this.unknown = unknown;
    }

    public YouTubeOperatingSystem webOs(Long webOs) {
        this.webOs = JsonNullable.of(webOs);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return webOs
     */
    public JsonNullable<Long> getWebOs() {
        return webOs;
    }

    public void setWebOs(JsonNullable<Long> webOs) {
        this.webOs = webOs;
    }

    public YouTubeOperatingSystem wii(Long wii) {
        this.wii = JsonNullable.of(wii);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return wii
     */
    public JsonNullable<Long> getWii() {
        return wii;
    }

    public void setWii(JsonNullable<Long> wii) {
        this.wii = wii;
    }

    public YouTubeOperatingSystem windows(Long windows) {
        this.windows = JsonNullable.of(windows);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return windows
     */
    public JsonNullable<Long> getWindows() {
        return windows;
    }

    public void setWindows(JsonNullable<Long> windows) {
        this.windows = windows;
    }

    public YouTubeOperatingSystem windowsMobile(Long windowsMobile) {
        this.windowsMobile = JsonNullable.of(windowsMobile);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return windowsMobile
     */
    public JsonNullable<Long> getWindowsMobile() {
        return windowsMobile;
    }

    public void setWindowsMobile(JsonNullable<Long> windowsMobile) {
        this.windowsMobile = windowsMobile;
    }

    public YouTubeOperatingSystem xbox(Long xbox) {
        this.xbox = JsonNullable.of(xbox);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return xbox
     */
    public JsonNullable<Long> getXbox() {
        return xbox;
    }

    public void setXbox(JsonNullable<Long> xbox) {
        this.xbox = xbox;
    }

    public YouTubeOperatingSystem vidaa(Long vidaa) {
        this.vidaa = JsonNullable.of(vidaa);
        return this;
    }

    /**
     * Number of times a resource (e.g.: a video) was viewed. `null` if data is missing.
     *
     * @return vidaa
     */
    public JsonNullable<Long> getVidaa() {
        return vidaa;
    }

    public void setVidaa(JsonNullable<Long> vidaa) {
        this.vidaa = vidaa;
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        YouTubeOperatingSystem youTubeOperatingSystem = (YouTubeOperatingSystem) o;
        return Objects.equals(this.android, youTubeOperatingSystem.android) &&
            Objects.equals(this.appleTvos, youTubeOperatingSystem.appleTvos) &&
            Objects.equals(this.bada, youTubeOperatingSystem.bada) &&
            Objects.equals(this.blackberry, youTubeOperatingSystem.blackberry) &&
            Objects.equals(this.chromeOs, youTubeOperatingSystem.chromeOs) &&
            Objects.equals(this.chromecast, youTubeOperatingSystem.chromecast) &&
            Objects.equals(this.fireOs, youTubeOperatingSystem.fireOs) &&
            Objects.equals(this.firefox, youTubeOperatingSystem.firefox) &&
            Objects.equals(this.hiptop, youTubeOperatingSystem.hiptop) &&
            Objects.equals(this.ios, youTubeOperatingSystem.ios) &&
            Objects.equals(this.kaios, youTubeOperatingSystem.kaios) &&
            Objects.equals(this.linux, youTubeOperatingSystem.linux) &&
            Objects.equals(this.mac, youTubeOperatingSystem.mac) &&
            Objects.equals(this.meego, youTubeOperatingSystem.meego) &&
            Objects.equals(this.nintendo3ds, youTubeOperatingSystem.nintendo3ds) &&
            Objects.equals(this.nintendoSwitch, youTubeOperatingSystem.nintendoSwitch) &&
            Objects.equals(this.other, youTubeOperatingSystem.other) &&
            Objects.equals(this.playstation, youTubeOperatingSystem.playstation) &&
            Objects.equals(this.playstationVita, youTubeOperatingSystem.playstationVita) &&
            Objects.equals(this.realmedia, youTubeOperatingSystem.realmedia) &&
            Objects.equals(this.roku, youTubeOperatingSystem.roku) &&
            Objects.equals(this.smartTv, youTubeOperatingSystem.smartTv) &&
            Objects.equals(this.symbian, youTubeOperatingSystem.symbian) &&
            Objects.equals(this.tizen, youTubeOperatingSystem.tizen) &&
            Objects.equals(this.unknown, youTubeOperatingSystem.unknown) &&
            Objects.equals(this.webOs, youTubeOperatingSystem.webOs) &&
            Objects.equals(this.wii, youTubeOperatingSystem.wii) &&
            Objects.equals(this.windows, youTubeOperatingSystem.windows) &&
            Objects.equals(this.windowsMobile, youTubeOperatingSystem.windowsMobile) &&
            Objects.equals(this.xbox, youTubeOperatingSystem.xbox) &&
            Objects.equals(this.vidaa, youTubeOperatingSystem.vidaa);
    }

    @Override
    public int hashCode() {
        return Objects
            .hash(android, appleTvos, bada, blackberry, chromeOs, chromecast, fireOs, firefox, hiptop, ios, kaios,
                linux, mac, meego, nintendo3ds, nintendoSwitch, other, playstation, playstationVita, realmedia, roku,
                smartTv, symbian, tizen, unknown, webOs, wii, windows, windowsMobile, xbox, vidaa);
    }

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

        sb.append("    android: ").append(toIndentedString(android)).append("\n");
        sb.append("    appleTvos: ").append(toIndentedString(appleTvos)).append("\n");
        sb.append("    bada: ").append(toIndentedString(bada)).append("\n");
        sb.append("    blackberry: ").append(toIndentedString(blackberry)).append("\n");
        sb.append("    chromeOs: ").append(toIndentedString(chromeOs)).append("\n");
        sb.append("    chromecast: ").append(toIndentedString(chromecast)).append("\n");
        sb.append("    fireOs: ").append(toIndentedString(fireOs)).append("\n");
        sb.append("    firefox: ").append(toIndentedString(firefox)).append("\n");
        sb.append("    hiptop: ").append(toIndentedString(hiptop)).append("\n");
        sb.append("    ios: ").append(toIndentedString(ios)).append("\n");
        sb.append("    kaios: ").append(toIndentedString(kaios)).append("\n");
        sb.append("    linux: ").append(toIndentedString(linux)).append("\n");
        sb.append("    mac: ").append(toIndentedString(mac)).append("\n");
        sb.append("    meego: ").append(toIndentedString(meego)).append("\n");
        sb.append("    nintendo3ds: ").append(toIndentedString(nintendo3ds)).append("\n");
        sb.append("    nintendoSwitch: ").append(toIndentedString(nintendoSwitch)).append("\n");
        sb.append("    other: ").append(toIndentedString(other)).append("\n");
        sb.append("    playstation: ").append(toIndentedString(playstation)).append("\n");
        sb.append("    playstationVita: ").append(toIndentedString(playstationVita)).append("\n");
        sb.append("    realmedia: ").append(toIndentedString(realmedia)).append("\n");
        sb.append("    roku: ").append(toIndentedString(roku)).append("\n");
        sb.append("    smartTv: ").append(toIndentedString(smartTv)).append("\n");
        sb.append("    symbian: ").append(toIndentedString(symbian)).append("\n");
        sb.append("    tizen: ").append(toIndentedString(tizen)).append("\n");
        sb.append("    unknown: ").append(toIndentedString(unknown)).append("\n");
        sb.append("    webOs: ").append(toIndentedString(webOs)).append("\n");
        sb.append("    wii: ").append(toIndentedString(wii)).append("\n");
        sb.append("    windows: ").append(toIndentedString(windows)).append("\n");
        sb.append("    windowsMobile: ").append(toIndentedString(windowsMobile)).append("\n");
        sb.append("    xbox: ").append(toIndentedString(xbox)).append("\n");
        sb.append("    vidaa: ").append(toIndentedString(vidaa)).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    ");
    }
}

