/**
 * Copyright 2015 Google Inc. All Rights Reserved.
 *
 * 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.
 */
import { AxiosPromise } from 'axios';
import { GoogleApis } from '../..';
import { BodyResponseCallback, GlobalOptions, MethodOptions } from '../../lib/api';
/**
 * YouTube Reporting API
 *
 * Schedules reporting jobs containing your YouTube Analytics data and downloads
 * the resulting bulk data reports in the form of CSV files.
 *
 * @example
 * const google = require('googleapis');
 * const youtubereporting = google.youtubereporting('v1');
 *
 * @namespace youtubereporting
 * @type {Function}
 * @version v1
 * @variation v1
 * @param {object=} options Options for Youtubereporting
 */
export declare class Youtubereporting {
    _options: GlobalOptions;
    google: GoogleApis;
    root: this;
    jobs: Resource$Jobs;
    media: Resource$Media;
    reportTypes: Resource$Reporttypes;
    constructor(options: GlobalOptions, google: GoogleApis);
    getRoot(): this;
}
/**
 * A generic empty message that you can re-use to avoid defining duplicated
 * empty messages in your APIs. A typical example is to use it as the request or
 * the response type of an API method. For instance:      service Foo { rpc
 * Bar(google.protobuf.Empty) returns (google.protobuf.Empty);     }  The JSON
 * representation for `Empty` is empty JSON object `{}`.
 */
export interface Schema$Empty {
}
/**
 * gdata
 */
export interface Schema$GdataBlobstore2Info {
    /**
     * gdata
     */
    blobGeneration: string;
    /**
     * gdata
     */
    blobId: string;
    /**
     * gdata
     */
    downloadReadHandle: string;
    /**
     * gdata
     */
    readToken: string;
    /**
     * gdata
     */
    uploadMetadataContainer: string;
}
/**
 * gdata
 */
export interface Schema$GdataCompositeMedia {
    /**
     * gdata
     */
    blobRef: string;
    /**
     * gdata
     */
    blobstore2Info: Schema$GdataBlobstore2Info;
    /**
     * gdata
     */
    cosmoBinaryReference: string;
    /**
     * gdata
     */
    crc32cHash: number;
    /**
     * gdata
     */
    inline: string;
    /**
     * gdata
     */
    length: string;
    /**
     * gdata
     */
    md5Hash: string;
    /**
     * gdata
     */
    objectId: Schema$GdataObjectId;
    /**
     * gdata
     */
    path: string;
    /**
     * gdata
     */
    referenceType: string;
    /**
     * gdata
     */
    sha1Hash: string;
}
/**
 * gdata
 */
export interface Schema$GdataContentTypeInfo {
    /**
     * gdata
     */
    bestGuess: string;
    /**
     * gdata
     */
    fromBytes: string;
    /**
     * gdata
     */
    fromFileName: string;
    /**
     * gdata
     */
    fromHeader: string;
    /**
     * gdata
     */
    fromUrlPath: string;
}
/**
 * gdata
 */
export interface Schema$GdataDiffChecksumsResponse {
    /**
     * gdata
     */
    checksumsLocation: Schema$GdataCompositeMedia;
    /**
     * gdata
     */
    chunkSizeBytes: string;
    /**
     * gdata
     */
    objectLocation: Schema$GdataCompositeMedia;
    /**
     * gdata
     */
    objectSizeBytes: string;
    /**
     * gdata
     */
    objectVersion: string;
}
/**
 * gdata
 */
export interface Schema$GdataDiffDownloadResponse {
    /**
     * gdata
     */
    objectLocation: Schema$GdataCompositeMedia;
}
/**
 * gdata
 */
export interface Schema$GdataDiffUploadRequest {
    /**
     * gdata
     */
    checksumsInfo: Schema$GdataCompositeMedia;
    /**
     * gdata
     */
    objectInfo: Schema$GdataCompositeMedia;
    /**
     * gdata
     */
    objectVersion: string;
}
/**
 * gdata
 */
export interface Schema$GdataDiffUploadResponse {
    /**
     * gdata
     */
    objectVersion: string;
    /**
     * gdata
     */
    originalObject: Schema$GdataCompositeMedia;
}
/**
 * gdata
 */
export interface Schema$GdataDiffVersionResponse {
    /**
     * gdata
     */
    objectSizeBytes: string;
    /**
     * gdata
     */
    objectVersion: string;
}
/**
 * gdata
 */
export interface Schema$GdataDownloadParameters {
    /**
     * gdata
     */
    allowGzipCompression: boolean;
    /**
     * gdata
     */
    ignoreRange: boolean;
}
/**
 * gdata
 */
export interface Schema$GdataMedia {
    /**
     * gdata
     */
    algorithm: string;
    /**
     * gdata
     */
    bigstoreObjectRef: string;
    /**
     * gdata
     */
    blobRef: string;
    /**
     * gdata
     */
    blobstore2Info: Schema$GdataBlobstore2Info;
    /**
     * gdata
     */
    compositeMedia: Schema$GdataCompositeMedia[];
    /**
     * gdata
     */
    contentType: string;
    /**
     * gdata
     */
    contentTypeInfo: Schema$GdataContentTypeInfo;
    /**
     * gdata
     */
    cosmoBinaryReference: string;
    /**
     * gdata
     */
    crc32cHash: number;
    /**
     * gdata
     */
    diffChecksumsResponse: Schema$GdataDiffChecksumsResponse;
    /**
     * gdata
     */
    diffDownloadResponse: Schema$GdataDiffDownloadResponse;
    /**
     * gdata
     */
    diffUploadRequest: Schema$GdataDiffUploadRequest;
    /**
     * gdata
     */
    diffUploadResponse: Schema$GdataDiffUploadResponse;
    /**
     * gdata
     */
    diffVersionResponse: Schema$GdataDiffVersionResponse;
    /**
     * gdata
     */
    downloadParameters: Schema$GdataDownloadParameters;
    /**
     * gdata
     */
    filename: string;
    /**
     * gdata
     */
    hash: string;
    /**
     * gdata
     */
    hashVerified: boolean;
    /**
     * gdata
     */
    inline: string;
    /**
     * gdata
     */
    isPotentialRetry: boolean;
    /**
     * gdata
     */
    length: string;
    /**
     * gdata
     */
    md5Hash: string;
    /**
     * gdata
     */
    mediaId: string;
    /**
     * gdata
     */
    objectId: Schema$GdataObjectId;
    /**
     * gdata
     */
    path: string;
    /**
     * gdata
     */
    referenceType: string;
    /**
     * gdata
     */
    sha1Hash: string;
    /**
     * gdata
     */
    sha256Hash: string;
    /**
     * gdata
     */
    timestamp: string;
    /**
     * gdata
     */
    token: string;
}
/**
 * gdata
 */
export interface Schema$GdataObjectId {
    /**
     * gdata
     */
    bucketName: string;
    /**
     * gdata
     */
    generation: string;
    /**
     * gdata
     */
    objectName: string;
}
/**
 * A job creating reports of a specific type.
 */
export interface Schema$Job {
    /**
     * The creation date/time of the job.
     */
    createTime: string;
    /**
     * The date/time when this job will expire/expired. After a job expired, no
     * new reports are generated.
     */
    expireTime: string;
    /**
     * The server-generated ID of the job (max. 40 characters).
     */
    id: string;
    /**
     * The name of the job (max. 100 characters).
     */
    name: string;
    /**
     * The type of reports this job creates. Corresponds to the ID of a
     * ReportType.
     */
    reportTypeId: string;
    /**
     * True if this a system-managed job that cannot be modified by the user;
     * otherwise false.
     */
    systemManaged: boolean;
}
/**
 * Response message for ReportingService.ListJobs.
 */
export interface Schema$ListJobsResponse {
    /**
     * The list of jobs.
     */
    jobs: Schema$Job[];
    /**
     * A token to retrieve next page of results. Pass this value in the
     * ListJobsRequest.page_token field in the subsequent call to `ListJobs`
     * method to retrieve the next page of results.
     */
    nextPageToken: string;
}
/**
 * Response message for ReportingService.ListReports.
 */
export interface Schema$ListReportsResponse {
    /**
     * A token to retrieve next page of results. Pass this value in the
     * ListReportsRequest.page_token field in the subsequent call to `ListReports`
     * method to retrieve the next page of results.
     */
    nextPageToken: string;
    /**
     * The list of report types.
     */
    reports: Schema$Report[];
}
/**
 * Response message for ReportingService.ListReportTypes.
 */
export interface Schema$ListReportTypesResponse {
    /**
     * A token to retrieve next page of results. Pass this value in the
     * ListReportTypesRequest.page_token field in the subsequent call to
     * `ListReportTypes` method to retrieve the next page of results.
     */
    nextPageToken: string;
    /**
     * The list of report types.
     */
    reportTypes: Schema$ReportType[];
}
/**
 * A report&#39;s metadata including the URL from which the report itself can be
 * downloaded.
 */
export interface Schema$Report {
    /**
     * The date/time when this report was created.
     */
    createTime: string;
    /**
     * The URL from which the report can be downloaded (max. 1000 characters).
     */
    downloadUrl: string;
    /**
     * The end of the time period that the report instance covers. The value is
     * exclusive.
     */
    endTime: string;
    /**
     * The server-generated ID of the report.
     */
    id: string;
    /**
     * The date/time when the job this report belongs to will expire/expired.
     */
    jobExpireTime: string;
    /**
     * The ID of the job that created this report.
     */
    jobId: string;
    /**
     * The start of the time period that the report instance covers. The value is
     * inclusive.
     */
    startTime: string;
}
/**
 * A report type.
 */
export interface Schema$ReportType {
    /**
     * The date/time when this report type was/will be deprecated.
     */
    deprecateTime: string;
    /**
     * The ID of the report type (max. 100 characters).
     */
    id: string;
    /**
     * The name of the report type (max. 100 characters).
     */
    name: string;
    /**
     * True if this a system-managed report type; otherwise false. Reporting jobs
     * for system-managed report types are created automatically and can thus not
     * be used in the `CreateJob` method.
     */
    systemManaged: boolean;
}
export declare class Resource$Jobs {
    root: Youtubereporting;
    reports: Resource$Jobs$Reports;
    constructor(root: Youtubereporting);
    getRoot(): Youtubereporting;
    /**
     * youtubereporting.jobs.create
     * @desc Creates a job and returns it.
     * @alias youtubereporting.jobs.create
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string=} params.onBehalfOfContentOwner The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).
     * @param {().Job} params.resource Request body data
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    create(params?: any, options?: MethodOptions): AxiosPromise<Schema$Job>;
    create(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$Job>, callback?: BodyResponseCallback<Schema$Job>): void;
    /**
     * youtubereporting.jobs.delete
     * @desc Deletes a job.
     * @alias youtubereporting.jobs.delete
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string} params.jobId The ID of the job to delete.
     * @param {string=} params.onBehalfOfContentOwner The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    delete(params?: any, options?: MethodOptions): AxiosPromise<Schema$Empty>;
    delete(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$Empty>, callback?: BodyResponseCallback<Schema$Empty>): void;
    /**
     * youtubereporting.jobs.get
     * @desc Gets a job.
     * @alias youtubereporting.jobs.get
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string} params.jobId The ID of the job to retrieve.
     * @param {string=} params.onBehalfOfContentOwner The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    get(params?: any, options?: MethodOptions): AxiosPromise<Schema$Job>;
    get(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$Job>, callback?: BodyResponseCallback<Schema$Job>): void;
    /**
     * youtubereporting.jobs.list
     * @desc Lists jobs.
     * @alias youtubereporting.jobs.list
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {boolean=} params.includeSystemManaged If set to true, also system-managed jobs will be returned; otherwise only user-created jobs will be returned. System-managed jobs can neither be modified nor deleted.
     * @param {string=} params.onBehalfOfContentOwner The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).
     * @param {integer=} params.pageSize Requested page size. Server may return fewer jobs than requested. If unspecified, server will pick an appropriate default.
     * @param {string=} params.pageToken A token identifying a page of results the server should return. Typically, this is the value of ListReportTypesResponse.next_page_token returned in response to the previous call to the `ListJobs` method.
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    list(params?: any, options?: MethodOptions): AxiosPromise<Schema$ListJobsResponse>;
    list(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$ListJobsResponse>, callback?: BodyResponseCallback<Schema$ListJobsResponse>): void;
}
export declare class Resource$Jobs$Reports {
    root: Youtubereporting;
    constructor(root: Youtubereporting);
    getRoot(): Youtubereporting;
    /**
     * youtubereporting.jobs.reports.get
     * @desc Gets the metadata of a specific report.
     * @alias youtubereporting.jobs.reports.get
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string} params.jobId The ID of the job.
     * @param {string=} params.onBehalfOfContentOwner The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).
     * @param {string} params.reportId The ID of the report to retrieve.
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    get(params?: any, options?: MethodOptions): AxiosPromise<Schema$Report>;
    get(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$Report>, callback?: BodyResponseCallback<Schema$Report>): void;
    /**
     * youtubereporting.jobs.reports.list
     * @desc Lists reports created by a specific job. Returns NOT_FOUND if the job
     * does not exist.
     * @alias youtubereporting.jobs.reports.list
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string=} params.createdAfter If set, only reports created after the specified date/time are returned.
     * @param {string} params.jobId The ID of the job.
     * @param {string=} params.onBehalfOfContentOwner The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).
     * @param {integer=} params.pageSize Requested page size. Server may return fewer report types than requested. If unspecified, server will pick an appropriate default.
     * @param {string=} params.pageToken A token identifying a page of results the server should return. Typically, this is the value of ListReportsResponse.next_page_token returned in response to the previous call to the `ListReports` method.
     * @param {string=} params.startTimeAtOrAfter If set, only reports whose start time is greater than or equal the specified date/time are returned.
     * @param {string=} params.startTimeBefore If set, only reports whose start time is smaller than the specified date/time are returned.
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    list(params?: any, options?: MethodOptions): AxiosPromise<Schema$ListReportsResponse>;
    list(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$ListReportsResponse>, callback?: BodyResponseCallback<Schema$ListReportsResponse>): void;
}
export declare class Resource$Media {
    root: Youtubereporting;
    constructor(root: Youtubereporting);
    getRoot(): Youtubereporting;
    /**
     * youtubereporting.media.download
     * @desc Method for media download. Download is supported on the URI
     * `/v1/media/{+name}?alt=media`.
     * @alias youtubereporting.media.download
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string} params.resourceName Name of the media that is being downloaded.
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    download(params?: any, options?: MethodOptions): AxiosPromise<Schema$GdataMedia>;
    download(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$GdataMedia>, callback?: BodyResponseCallback<Schema$GdataMedia>): void;
}
export declare class Resource$Reporttypes {
    root: Youtubereporting;
    constructor(root: Youtubereporting);
    getRoot(): Youtubereporting;
    /**
     * youtubereporting.reportTypes.list
     * @desc Lists report types.
     * @alias youtubereporting.reportTypes.list
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {boolean=} params.includeSystemManaged If set to true, also system-managed report types will be returned; otherwise only the report types that can be used to create new reporting jobs will be returned.
     * @param {string=} params.onBehalfOfContentOwner The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).
     * @param {integer=} params.pageSize Requested page size. Server may return fewer report types than requested. If unspecified, server will pick an appropriate default.
     * @param {string=} params.pageToken A token identifying a page of results the server should return. Typically, this is the value of ListReportTypesResponse.next_page_token returned in response to the previous call to the `ListReportTypes` method.
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    list(params?: any, options?: MethodOptions): AxiosPromise<Schema$ListReportTypesResponse>;
    list(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$ListReportTypesResponse>, callback?: BodyResponseCallback<Schema$ListReportTypesResponse>): void;
}
