/*
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
/*
 * This code was generated by https://github.com/googleapis/google-api-java-client-services/
 * Modify at your own risk.
 */

package com.google.api.services.sheets.v4.model;

/**
 * Represents a color in the RGBA color space. This representation is designed for simplicity of
 * conversion to/from color representations in various languages over compactness. For example, the
 * fields of this representation can be trivially provided to the constructor of `java.awt.Color` in
 * Java; it can also be trivially provided to UIColor's `+colorWithRed:green:blue:alpha` method in
 * iOS; and, with just a little work, it can be easily formatted into a CSS `rgba()` string in
 * JavaScript. This reference page doesn't carry information about the absolute color space that
 * should be used to interpret the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By
 * default, applications should assume the sRGB color space. When color equality needs to be
 * decided, implementations, unless documented otherwise, treat two colors as equal if all their
 * red, green, blue, and alpha values each differ by at most 1e-5. Example (Java): import
 * com.google.type.Color; // ... public static java.awt.Color fromProto(Color protocolor) { float
 * alpha = protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new
 * java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue(), alpha); }
 * public static Color toProto(java.awt.Color color) { float red = (float) color.getRed(); float
 * green = (float) color.getGreen(); float blue = (float) color.getBlue(); float denominator =
 * 255.0; Color.Builder resultBuilder = Color .newBuilder() .setRed(red / denominator)
 * .setGreen(green / denominator) .setBlue(blue / denominator); int alpha = color.getAlpha(); if
 * (alpha != 255) { result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) /
 * denominator) .build()); } return resultBuilder.build(); } // ... Example (iOS / Obj-C): // ...
 * static UIColor* fromProto(Color* protocolor) { float red = [protocolor red]; float green =
 * [protocolor green]; float blue = [protocolor blue]; FloatValue* alpha_wrapper = [protocolor
 * alpha]; float alpha = 1.0; if (alpha_wrapper != nil) { alpha = [alpha_wrapper value]; } return
 * [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; } static Color* toProto(UIColor*
 * color) { CGFloat red, green, blue, alpha; if (![color getRed: green: blue: alpha:]) { return nil;
 * } Color* result = [[Color alloc] init]; [result setRed:red]; [result setGreen:green]; [result
 * setBlue:blue]; if (alpha <= 0.9999) { [result setAlpha:floatWrapperWithValue(alpha)]; } [result
 * autorelease]; return result; } // ... Example (JavaScript): // ... var protoToCssColor =
 * function(rgb_color) { var redFrac = rgb_color.red || 0.0; var greenFrac = rgb_color.green || 0.0;
 * var blueFrac = rgb_color.blue || 0.0; var red = Math.floor(redFrac * 255); var green =
 * Math.floor(greenFrac * 255); var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color))
 * { return rgbToCssColor(red, green, blue); } var alphaFrac = rgb_color.alpha.value || 0.0; var
 * rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ',', alphaFrac,
 * ')'].join(''); }; var rgbToCssColor = function(red, green, blue) { var rgbNumber = new
 * Number((red << 16) | (green << 8) | blue); var hexString = rgbNumber.toString(16); var
 * missingZeros = 6 - hexString.length; var resultBuilder = ['#']; for (var i = 0; i < missingZeros;
 * i++) { resultBuilder.push('0'); } resultBuilder.push(hexString); return resultBuilder.join('');
 * }; // ...
 *
 * <p> This is the Java data model class that specifies how to parse/serialize into the JSON that is
 * transmitted over HTTP when working with the Google Sheets API. For a detailed explanation see:
 * <a href="https://developers.google.com/api-client-library/java/google-http-java-client/json">https://developers.google.com/api-client-library/java/google-http-java-client/json</a>
 * </p>
 *
 * @author Google, Inc.
 */
@SuppressWarnings("javadoc")
public final class Color extends com.google.api.client.json.GenericJson {

  /**
   * The fraction of this color that should be applied to the pixel. That is, the final pixel color
   * is defined by the equation: `pixel color = alpha * (this color) + (1.0 - alpha) * (background
   * color)` This means that a value of 1.0 corresponds to a solid color, whereas a value of 0.0
   * corresponds to a completely transparent color. This uses a wrapper message rather than a simple
   * float scalar so that it is possible to distinguish between a default value and the value being
   * unset. If omitted, this color object is rendered as a solid color (as if the alpha value had
   * been explicitly given a value of 1.0).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float alpha;

  /**
   * The amount of blue in the color as a value in the interval [0, 1].
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float blue;

  /**
   * The amount of green in the color as a value in the interval [0, 1].
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float green;

  /**
   * The amount of red in the color as a value in the interval [0, 1].
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float red;

  /**
   * The fraction of this color that should be applied to the pixel. That is, the final pixel color
   * is defined by the equation: `pixel color = alpha * (this color) + (1.0 - alpha) * (background
   * color)` This means that a value of 1.0 corresponds to a solid color, whereas a value of 0.0
   * corresponds to a completely transparent color. This uses a wrapper message rather than a simple
   * float scalar so that it is possible to distinguish between a default value and the value being
   * unset. If omitted, this color object is rendered as a solid color (as if the alpha value had
   * been explicitly given a value of 1.0).
   * @return value or {@code null} for none
   */
  public java.lang.Float getAlpha() {
    return alpha;
  }

  /**
   * The fraction of this color that should be applied to the pixel. That is, the final pixel color
   * is defined by the equation: `pixel color = alpha * (this color) + (1.0 - alpha) * (background
   * color)` This means that a value of 1.0 corresponds to a solid color, whereas a value of 0.0
   * corresponds to a completely transparent color. This uses a wrapper message rather than a simple
   * float scalar so that it is possible to distinguish between a default value and the value being
   * unset. If omitted, this color object is rendered as a solid color (as if the alpha value had
   * been explicitly given a value of 1.0).
   * @param alpha alpha or {@code null} for none
   */
  public Color setAlpha(java.lang.Float alpha) {
    this.alpha = alpha;
    return this;
  }

  /**
   * The amount of blue in the color as a value in the interval [0, 1].
   * @return value or {@code null} for none
   */
  public java.lang.Float getBlue() {
    return blue;
  }

  /**
   * The amount of blue in the color as a value in the interval [0, 1].
   * @param blue blue or {@code null} for none
   */
  public Color setBlue(java.lang.Float blue) {
    this.blue = blue;
    return this;
  }

  /**
   * The amount of green in the color as a value in the interval [0, 1].
   * @return value or {@code null} for none
   */
  public java.lang.Float getGreen() {
    return green;
  }

  /**
   * The amount of green in the color as a value in the interval [0, 1].
   * @param green green or {@code null} for none
   */
  public Color setGreen(java.lang.Float green) {
    this.green = green;
    return this;
  }

  /**
   * The amount of red in the color as a value in the interval [0, 1].
   * @return value or {@code null} for none
   */
  public java.lang.Float getRed() {
    return red;
  }

  /**
   * The amount of red in the color as a value in the interval [0, 1].
   * @param red red or {@code null} for none
   */
  public Color setRed(java.lang.Float red) {
    this.red = red;
    return this;
  }

  @Override
  public Color set(String fieldName, Object value) {
    return (Color) super.set(fieldName, value);
  }

  @Override
  public Color clone() {
    return (Color) super.clone();
  }

}
