/**
 * GitHub v3 REST API
 * GitHub's v3 REST API.
 *
 * The version of the OpenAPI document: 0.0.5
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 *
 */


import ApiClient from "../ApiClient";
import ApiOverview from '../model/ApiOverview';
import InlineResponse200 from '../model/InlineResponse200';

/**
* Meta service.
* @module api/MetaApi
* @version 0.0.5
*/
export default class MetaApi {

    /**
    * Constructs a new MetaApi. 
    * @alias module:api/MetaApi
    * @class
    * @param {module:ApiClient} [apiClient] Optional API client implementation to use,
    * default to {@link module:ApiClient#instance} if unspecified.
    */
    constructor(apiClient) {
        this.apiClient = apiClient || ApiClient.instance;
    }


    /**
     * Callback function to receive the result of the metaGet operation.
     * @callback module:api/MetaApi~metaGetCallback
     * @param {String} error Error message, if any.
     * @param {module:model/ApiOverview} data The data returned by the service call.
     * @param {String} response The complete HTTP response.
     */

    /**
     * Get GitHub meta information
     * This endpoint provides a list of GitHub's IP addresses. For more information, see \"[About GitHub's IP addresses](https://help.github.com/articles/about-github-s-ip-addresses/).\"
     * @param {module:api/MetaApi~metaGetCallback} callback The callback function, accepting three arguments: error, data, response
     * data is of type: {@link module:model/ApiOverview}
     */
    metaGet(callback) {
      let postBody = null;

      let pathParams = {
      };
      let queryParams = {
      };
      let headerParams = {
      };
      let formParams = {
      };

      let authNames = [];
      let contentTypes = [];
      let accepts = ['application/json'];
      let returnType = ApiOverview;
      return this.apiClient.callApi(
        '/meta', 'GET',
        pathParams, queryParams, headerParams, formParams, postBody,
        authNames, contentTypes, accepts, returnType, null, callback
      );
    }

    /**
     * Callback function to receive the result of the metaGetOctocat operation.
     * @callback module:api/MetaApi~metaGetOctocatCallback
     * @param {String} error Error message, if any.
     * @param {String} data The data returned by the service call.
     * @param {String} response The complete HTTP response.
     */

    /**
     * Get Octocat
     * Get the octocat as ASCII art
     * @param {Object} opts Optional parameters
     * @param {String} opts.s The words to show in Octocat's speech bubble
     * @param {module:api/MetaApi~metaGetOctocatCallback} callback The callback function, accepting three arguments: error, data, response
     * data is of type: {@link String}
     */
    metaGetOctocat(opts, callback) {
      opts = opts || {};
      let postBody = null;

      let pathParams = {
      };
      let queryParams = {
        's': opts['s']
      };
      let headerParams = {
      };
      let formParams = {
      };

      let authNames = [];
      let contentTypes = [];
      let accepts = ['application/octocat-stream'];
      let returnType = 'String';
      return this.apiClient.callApi(
        '/octocat', 'GET',
        pathParams, queryParams, headerParams, formParams, postBody,
        authNames, contentTypes, accepts, returnType, null, callback
      );
    }

    /**
     * Callback function to receive the result of the metaGetZen operation.
     * @callback module:api/MetaApi~metaGetZenCallback
     * @param {String} error Error message, if any.
     * @param {String} data The data returned by the service call.
     * @param {String} response The complete HTTP response.
     */

    /**
     * Get the Zen of GitHub
     * Get a random sentence from the Zen of GitHub
     * @param {module:api/MetaApi~metaGetZenCallback} callback The callback function, accepting three arguments: error, data, response
     * data is of type: {@link String}
     */
    metaGetZen(callback) {
      let postBody = null;

      let pathParams = {
      };
      let queryParams = {
      };
      let headerParams = {
      };
      let formParams = {
      };

      let authNames = [];
      let contentTypes = [];
      let accepts = ['text/plain'];
      let returnType = 'String';
      return this.apiClient.callApi(
        '/zen', 'GET',
        pathParams, queryParams, headerParams, formParams, postBody,
        authNames, contentTypes, accepts, returnType, null, callback
      );
    }

    /**
     * Callback function to receive the result of the metaRoot operation.
     * @callback module:api/MetaApi~metaRootCallback
     * @param {String} error Error message, if any.
     * @param {module:model/InlineResponse200} data The data returned by the service call.
     * @param {String} response The complete HTTP response.
     */

    /**
     * GitHub API Root
     * Get Hypermedia links to resources accessible in GitHub's REST API
     * @param {module:api/MetaApi~metaRootCallback} callback The callback function, accepting three arguments: error, data, response
     * data is of type: {@link module:model/InlineResponse200}
     */
    metaRoot(callback) {
      let postBody = null;

      let pathParams = {
      };
      let queryParams = {
      };
      let headerParams = {
      };
      let formParams = {
      };

      let authNames = [];
      let contentTypes = [];
      let accepts = ['application/json'];
      let returnType = InlineResponse200;
      return this.apiClient.callApi(
        '/', 'GET',
        pathParams, queryParams, headerParams, formParams, postBody,
        authNames, contentTypes, accepts, returnType, null, callback
      );
    }


}
