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

import com.fasterxml.jackson.annotation.JsonProperty;

import org.openapitools.jackson.nullable.JsonNullable;

import java.util.Objects;

/**
 * AmazonOperatingSystem
 */
public class AmazonOperatingSystem {

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

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

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

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

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

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

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

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

    public AmazonOperatingSystem alexa(Long alexa) {
        this.alexa = JsonNullable.of(alexa);
        return this;
    }

    /**
     * The number of streams, aggregated by provided filter parameters.
     *
     * @return alexa
     */
    public JsonNullable<Long> getAlexa() {
        return alexa;
    }

    public void setAlexa(JsonNullable<Long> alexa) {
        this.alexa = alexa;
    }

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

    /**
     * The number of streams, aggregated by provided filter parameters.
     *
     * @return android
     */
    public JsonNullable<Long> getAndroid() {
        return android;
    }

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

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

    /**
     * The number of streams, aggregated by provided filter parameters.
     *
     * @return fireOs
     */
    public JsonNullable<Long> getFireOs() {
        return fireOs;
    }

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

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

    /**
     * The number of streams, aggregated by provided filter parameters.
     *
     * @return ios
     */
    public JsonNullable<Long> getIos() {
        return ios;
    }

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

    public AmazonOperatingSystem macOsx(Long macOsx) {
        this.macOsx = JsonNullable.of(macOsx);
        return this;
    }

    /**
     * The number of streams, aggregated by provided filter parameters.
     *
     * @return macOsx
     */
    public JsonNullable<Long> getMacOsx() {
        return macOsx;
    }

    public void setMacOsx(JsonNullable<Long> macOsx) {
        this.macOsx = macOsx;
    }

    public AmazonOperatingSystem thirdPartyDeviceOs(Long thirdPartyDeviceOs) {
        this.thirdPartyDeviceOs = JsonNullable.of(thirdPartyDeviceOs);
        return this;
    }

    /**
     * The number of streams, aggregated by provided filter parameters.
     *
     * @return thirdPartyDeviceOs
     */
    public JsonNullable<Long> getThirdPartyDeviceOs() {
        return thirdPartyDeviceOs;
    }

    public void setThirdPartyDeviceOs(JsonNullable<Long> thirdPartyDeviceOs) {
        this.thirdPartyDeviceOs = thirdPartyDeviceOs;
    }

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

    /**
     * The number of streams, aggregated by provided filter parameters.
     *
     * @return unknown
     */
    public JsonNullable<Long> getUnknown() {
        return unknown;
    }

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

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

    /**
     * The number of streams, aggregated by provided filter parameters.
     *
     * @return windows
     */
    public JsonNullable<Long> getWindows() {
        return windows;
    }

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


    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        AmazonOperatingSystem amazonOperatingSystem = (AmazonOperatingSystem) o;
        return Objects.equals(this.alexa, amazonOperatingSystem.alexa) &&
            Objects.equals(this.android, amazonOperatingSystem.android) &&
            Objects.equals(this.fireOs, amazonOperatingSystem.fireOs) &&
            Objects.equals(this.ios, amazonOperatingSystem.ios) &&
            Objects.equals(this.macOsx, amazonOperatingSystem.macOsx) &&
            Objects.equals(this.thirdPartyDeviceOs, amazonOperatingSystem.thirdPartyDeviceOs) &&
            Objects.equals(this.unknown, amazonOperatingSystem.unknown) &&
            Objects.equals(this.windows, amazonOperatingSystem.windows);
    }

    @Override
    public int hashCode() {
        return Objects.hash(alexa, android, fireOs, ios, macOsx, thirdPartyDeviceOs, unknown, windows);
    }

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

        sb.append("    alexa: ").append(toIndentedString(alexa)).append("\n");
        sb.append("    android: ").append(toIndentedString(android)).append("\n");
        sb.append("    fireOs: ").append(toIndentedString(fireOs)).append("\n");
        sb.append("    ios: ").append(toIndentedString(ios)).append("\n");
        sb.append("    macOsx: ").append(toIndentedString(macOsx)).append("\n");
        sb.append("    thirdPartyDeviceOs: ").append(toIndentedString(thirdPartyDeviceOs)).append("\n");
        sb.append("    unknown: ").append(toIndentedString(unknown)).append("\n");
        sb.append("    windows: ").append(toIndentedString(windows)).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    ");
    }
}

