# Copyright 2019 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.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.Sheets.V4.Model.PivotTable do
  @moduledoc """
  A pivot table.

  ## Attributes

  *   `columns` (*type:* `list(GoogleApi.Sheets.V4.Model.PivotGroup.t)`, *default:* `nil`) - Each column grouping in the pivot table.
  *   `criteria` (*type:* `%{optional(String.t) => GoogleApi.Sheets.V4.Model.PivotFilterCriteria.t}`, *default:* `nil`) - An optional mapping of filters per source column offset. The filters are applied before aggregating data into the pivot table. The map's key is the column offset of the source range that you want to filter, and the value is the criteria for that column. For example, if the source was `C10:E15`, a key of `0` will have the filter for column `C`, whereas the key `1` is for column `D`. This field is deprecated in favor of filter_specs.
  *   `dataExecutionStatus` (*type:* `GoogleApi.Sheets.V4.Model.DataExecutionStatus.t`, *default:* `nil`) - Output only. The data execution status for data source pivot tables.
  *   `dataSourceId` (*type:* `String.t`, *default:* `nil`) - The ID of the data source the pivot table is reading data from.
  *   `filterSpecs` (*type:* `list(GoogleApi.Sheets.V4.Model.PivotFilterSpec.t)`, *default:* `nil`) - The filters applied to the source columns before aggregating data for the pivot table. Both criteria and filter_specs are populated in responses. If both fields are specified in an update request, this field takes precedence.
  *   `rows` (*type:* `list(GoogleApi.Sheets.V4.Model.PivotGroup.t)`, *default:* `nil`) - Each row grouping in the pivot table.
  *   `source` (*type:* `GoogleApi.Sheets.V4.Model.GridRange.t`, *default:* `nil`) - The range the pivot table is reading data from.
  *   `valueLayout` (*type:* `String.t`, *default:* `nil`) - Whether values should be listed horizontally (as columns) or vertically (as rows).
  *   `values` (*type:* `list(GoogleApi.Sheets.V4.Model.PivotValue.t)`, *default:* `nil`) - A list of values to include in the pivot table.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :columns => list(GoogleApi.Sheets.V4.Model.PivotGroup.t()) | nil,
          :criteria =>
            %{optional(String.t()) => GoogleApi.Sheets.V4.Model.PivotFilterCriteria.t()} | nil,
          :dataExecutionStatus => GoogleApi.Sheets.V4.Model.DataExecutionStatus.t() | nil,
          :dataSourceId => String.t() | nil,
          :filterSpecs => list(GoogleApi.Sheets.V4.Model.PivotFilterSpec.t()) | nil,
          :rows => list(GoogleApi.Sheets.V4.Model.PivotGroup.t()) | nil,
          :source => GoogleApi.Sheets.V4.Model.GridRange.t() | nil,
          :valueLayout => String.t() | nil,
          :values => list(GoogleApi.Sheets.V4.Model.PivotValue.t()) | nil
        }

  field(:columns, as: GoogleApi.Sheets.V4.Model.PivotGroup, type: :list)
  field(:criteria, as: GoogleApi.Sheets.V4.Model.PivotFilterCriteria, type: :map)
  field(:dataExecutionStatus, as: GoogleApi.Sheets.V4.Model.DataExecutionStatus)
  field(:dataSourceId)
  field(:filterSpecs, as: GoogleApi.Sheets.V4.Model.PivotFilterSpec, type: :list)
  field(:rows, as: GoogleApi.Sheets.V4.Model.PivotGroup, type: :list)
  field(:source, as: GoogleApi.Sheets.V4.Model.GridRange)
  field(:valueLayout)
  field(:values, as: GoogleApi.Sheets.V4.Model.PivotValue, type: :list)
end

defimpl Poison.Decoder, for: GoogleApi.Sheets.V4.Model.PivotTable do
  def decode(value, options) do
    GoogleApi.Sheets.V4.Model.PivotTable.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.Sheets.V4.Model.PivotTable do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
