// Copyright 2025 Google LLC
//
// 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.

syntax = "proto3";

package google.maps.weather.v1;

option csharp_namespace = "Google.Geo.Weather.V1";
option go_package = "cloud.google.com/go/maps/weather/apiv1/weatherpb;weatherpb";
option java_multiple_files = true;
option java_outer_classname = "PrecipitationProto";
option java_package = "com.google.maps.weather.v1";
option objc_class_prefix = "GMWV1";
option php_namespace = "Google\\Geo\\Weather\\V1";

// Represents a set of precipitation values at a given location.
message Precipitation {
  // The probability of precipitation (values from 0 to 100).
  PrecipitationProbability probability = 1;

  // The amount of snow, measured as liquid water equivalent, that has
  // accumulated over a period of time. Note: QPF is an abbreviation for
  // Quantitative Precipitation Forecast (please see the
  // QuantitativePrecipitationForecast definition for more details).
  QuantitativePrecipitationForecast snow_qpf = 3;

  // The amount of rain, measured as liquid water equivalent, that has
  // accumulated over a period of time. Note: QPF is an abbreviation for
  // Quantitative Precipitation Forecast (please see the
  // QuantitativePrecipitationForecast definition for more details).
  QuantitativePrecipitationForecast qpf = 4;
}

// Represents the probability of precipitation at a given location.
message PrecipitationProbability {
  // A percentage from 0 to 100 that indicates the chances of precipitation.
  optional int32 percent = 1;

  // A code that indicates the type of precipitation.
  PrecipitationType type = 2;
}

// Represents the expected amount of melted precipitation accumulated over a
// specified time period over a specified area (reference:
// https://en.wikipedia.org/wiki/Quantitative_precipitation_forecast) -
// usually abbreviated QPF for short.
message QuantitativePrecipitationForecast {
  // Represents the unit used to measure the amount of accumulated
  // precipitation.
  enum Unit {
    // Unspecified precipitation unit.
    UNIT_UNSPECIFIED = 0;

    // The amount of precipitation is measured in millimeters.
    MILLIMETERS = 3;

    // The amount of precipitation is measured in inches.
    INCHES = 2;
  }

  // The amount of precipitation, measured as liquid water equivalent, that has
  // accumulated over a period of time.
  optional float quantity = 1;

  // The code of the unit used to measure the amount of accumulated
  // precipitation.
  Unit unit = 2;
}

// Represents the type of precipitation at a given location.
enum PrecipitationType {
  // Unspecified precipitation type.
  PRECIPITATION_TYPE_UNSPECIFIED = 0;

  // No precipitation.
  NONE = 8;

  // Snow precipitation.
  SNOW = 1;

  // Rain precipitation.
  RAIN = 2;

  // Light rain precipitation.
  LIGHT_RAIN = 3;

  // Heavy rain precipitation.
  HEAVY_RAIN = 4;

  // Both rain and snow precipitations.
  RAIN_AND_SNOW = 5;

  // Sleet precipitation.
  SLEET = 6;

  // Freezing rain precipitation.
  FREEZING_RAIN = 7;
}
