<?php

/*
 * Copyright 2014 Google Inc.
 *
 * 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.
 */
namespace Google\Site_Kit_Dependencies\Google\Service\SearchConsole;

class SearchAnalyticsQueryRequest extends \Google\Site_Kit_Dependencies\Google\Collection
{
    public const AGGREGATION_TYPE_AUTO = 'AUTO';
    public const AGGREGATION_TYPE_BY_PROPERTY = 'BY_PROPERTY';
    public const AGGREGATION_TYPE_BY_PAGE = 'BY_PAGE';
    public const AGGREGATION_TYPE_BY_NEWS_SHOWCASE_PANEL = 'BY_NEWS_SHOWCASE_PANEL';
    /**
     * Default value, should not be used.
     */
    public const DATA_STATE_DATA_STATE_UNSPECIFIED = 'DATA_STATE_UNSPECIFIED';
    /**
     * Include full final data only, without partial.
     */
    public const DATA_STATE_FINAL = 'FINAL';
    /**
     * Include all data, full and partial.
     */
    public const DATA_STATE_ALL = 'ALL';
    /**
     * Include hourly data, full and partial. Required when grouping by HOUR.
     */
    public const DATA_STATE_HOURLY_ALL = 'HOURLY_ALL';
    public const SEARCH_TYPE_WEB = 'WEB';
    public const SEARCH_TYPE_IMAGE = 'IMAGE';
    public const SEARCH_TYPE_VIDEO = 'VIDEO';
    /**
     * News tab in search.
     */
    public const SEARCH_TYPE_NEWS = 'NEWS';
    /**
     * Discover.
     */
    public const SEARCH_TYPE_DISCOVER = 'DISCOVER';
    /**
     * Google News (news.google.com or mobile app).
     */
    public const SEARCH_TYPE_GOOGLE_NEWS = 'GOOGLE_NEWS';
    public const TYPE_WEB = 'WEB';
    public const TYPE_IMAGE = 'IMAGE';
    public const TYPE_VIDEO = 'VIDEO';
    /**
     * News tab in search.
     */
    public const TYPE_NEWS = 'NEWS';
    /**
     * Discover.
     */
    public const TYPE_DISCOVER = 'DISCOVER';
    /**
     * Google News (news.google.com or mobile app).
     */
    public const TYPE_GOOGLE_NEWS = 'GOOGLE_NEWS';
    protected $collection_key = 'dimensions';
    /**
     * [Optional; Default is \"auto\"] How data is aggregated. If aggregated by
     * property, all data for the same property is aggregated; if aggregated by
     * page, all data is aggregated by canonical URI. If you filter or group by
     * page, choose AUTO; otherwise you can aggregate either by property or by
     * page, depending on how you want your data calculated; see the help
     * documentation to learn how data is calculated differently by site versus by
     * page. **Note:** If you group or filter by page, you cannot aggregate by
     * property. If you specify any value other than AUTO, the aggregation type in
     * the result will match the requested type, or if you request an invalid
     * type, you will get an error. The API will never change your aggregation
     * type if the requested type is invalid.
     *
     * @var string
     */
    public $aggregationType;
    /**
     * The data state to be fetched, can be full or all, the latter including full
     * and partial data.
     *
     * @var string
     */
    public $dataState;
    protected $dimensionFilterGroupsType = ApiDimensionFilterGroup::class;
    protected $dimensionFilterGroupsDataType = 'array';
    /**
     * [Optional] Zero or more dimensions to group results by. Dimensions are the
     * group-by values in the Search Analytics page. Dimensions are combined to
     * create a unique row key for each row. Results are grouped in the order that
     * you supply these dimensions.
     *
     * @var string[]
     */
    public $dimensions;
    /**
     * [Required] End date of the requested date range, in YYYY-MM-DD format, in
     * PST (UTC - 8:00). Must be greater than or equal to the start date. This
     * value is included in the range.
     *
     * @var string
     */
    public $endDate;
    /**
     * [Optional; Default is 1000] The maximum number of rows to return. Must be a
     * number from 1 to 25,000 (inclusive).
     *
     * @var int
     */
    public $rowLimit;
    /**
     * [Optional; Default is \"web\"] The search type to filter for.
     *
     * @var string
     */
    public $searchType;
    /**
     * [Required] Start date of the requested date range, in YYYY-MM-DD format, in
     * PST time (UTC - 8:00). Must be less than or equal to the end date. This
     * value is included in the range.
     *
     * @var string
     */
    public $startDate;
    /**
     * [Optional; Default is 0] Zero-based index of the first row in the response.
     * Must be a non-negative number.
     *
     * @var int
     */
    public $startRow;
    /**
     * Optional. [Optional; Default is \"web\"] Type of report: search type, or
     * either Discover or Gnews.
     *
     * @var string
     */
    public $type;
    /**
     * [Optional; Default is \"auto\"] How data is aggregated. If aggregated by
     * property, all data for the same property is aggregated; if aggregated by
     * page, all data is aggregated by canonical URI. If you filter or group by
     * page, choose AUTO; otherwise you can aggregate either by property or by
     * page, depending on how you want your data calculated; see the help
     * documentation to learn how data is calculated differently by site versus by
     * page. **Note:** If you group or filter by page, you cannot aggregate by
     * property. If you specify any value other than AUTO, the aggregation type in
     * the result will match the requested type, or if you request an invalid
     * type, you will get an error. The API will never change your aggregation
     * type if the requested type is invalid.
     *
     * Accepted values: AUTO, BY_PROPERTY, BY_PAGE, BY_NEWS_SHOWCASE_PANEL
     *
     * @param self::AGGREGATION_TYPE_* $aggregationType
     */
    public function setAggregationType($aggregationType)
    {
        $this->aggregationType = $aggregationType;
    }
    /**
     * @return self::AGGREGATION_TYPE_*
     */
    public function getAggregationType()
    {
        return $this->aggregationType;
    }
    /**
     * The data state to be fetched, can be full or all, the latter including full
     * and partial data.
     *
     * Accepted values: DATA_STATE_UNSPECIFIED, FINAL, ALL, HOURLY_ALL
     *
     * @param self::DATA_STATE_* $dataState
     */
    public function setDataState($dataState)
    {
        $this->dataState = $dataState;
    }
    /**
     * @return self::DATA_STATE_*
     */
    public function getDataState()
    {
        return $this->dataState;
    }
    /**
     * [Optional] Zero or more filters to apply to the dimension grouping values;
     * for example, 'query contains \"buy\"' to see only data where the query
     * string contains the substring \"buy\" (not case-sensitive). You can filter
     * by a dimension without grouping by it.
     *
     * @param ApiDimensionFilterGroup[] $dimensionFilterGroups
     */
    public function setDimensionFilterGroups($dimensionFilterGroups)
    {
        $this->dimensionFilterGroups = $dimensionFilterGroups;
    }
    /**
     * @return ApiDimensionFilterGroup[]
     */
    public function getDimensionFilterGroups()
    {
        return $this->dimensionFilterGroups;
    }
    /**
     * [Optional] Zero or more dimensions to group results by. Dimensions are the
     * group-by values in the Search Analytics page. Dimensions are combined to
     * create a unique row key for each row. Results are grouped in the order that
     * you supply these dimensions.
     *
     * @param string[] $dimensions
     */
    public function setDimensions($dimensions)
    {
        $this->dimensions = $dimensions;
    }
    /**
     * @return string[]
     */
    public function getDimensions()
    {
        return $this->dimensions;
    }
    /**
     * [Required] End date of the requested date range, in YYYY-MM-DD format, in
     * PST (UTC - 8:00). Must be greater than or equal to the start date. This
     * value is included in the range.
     *
     * @param string $endDate
     */
    public function setEndDate($endDate)
    {
        $this->endDate = $endDate;
    }
    /**
     * @return string
     */
    public function getEndDate()
    {
        return $this->endDate;
    }
    /**
     * [Optional; Default is 1000] The maximum number of rows to return. Must be a
     * number from 1 to 25,000 (inclusive).
     *
     * @param int $rowLimit
     */
    public function setRowLimit($rowLimit)
    {
        $this->rowLimit = $rowLimit;
    }
    /**
     * @return int
     */
    public function getRowLimit()
    {
        return $this->rowLimit;
    }
    /**
     * [Optional; Default is \"web\"] The search type to filter for.
     *
     * Accepted values: WEB, IMAGE, VIDEO, NEWS, DISCOVER, GOOGLE_NEWS
     *
     * @param self::SEARCH_TYPE_* $searchType
     */
    public function setSearchType($searchType)
    {
        $this->searchType = $searchType;
    }
    /**
     * @return self::SEARCH_TYPE_*
     */
    public function getSearchType()
    {
        return $this->searchType;
    }
    /**
     * [Required] Start date of the requested date range, in YYYY-MM-DD format, in
     * PST time (UTC - 8:00). Must be less than or equal to the end date. This
     * value is included in the range.
     *
     * @param string $startDate
     */
    public function setStartDate($startDate)
    {
        $this->startDate = $startDate;
    }
    /**
     * @return string
     */
    public function getStartDate()
    {
        return $this->startDate;
    }
    /**
     * [Optional; Default is 0] Zero-based index of the first row in the response.
     * Must be a non-negative number.
     *
     * @param int $startRow
     */
    public function setStartRow($startRow)
    {
        $this->startRow = $startRow;
    }
    /**
     * @return int
     */
    public function getStartRow()
    {
        return $this->startRow;
    }
    /**
     * Optional. [Optional; Default is \"web\"] Type of report: search type, or
     * either Discover or Gnews.
     *
     * Accepted values: WEB, IMAGE, VIDEO, NEWS, DISCOVER, GOOGLE_NEWS
     *
     * @param self::TYPE_* $type
     */
    public function setType($type)
    {
        $this->type = $type;
    }
    /**
     * @return self::TYPE_*
     */
    public function getType()
    {
        return $this->type;
    }
}
// Adding a class alias for backwards compatibility with the previous class name.
class_alias(SearchAnalyticsQueryRequest::class, 'Google\Site_Kit_Dependencies\Google_Service_SearchConsole_SearchAnalyticsQueryRequest');
