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

require 'date'
require 'google/apis/core/base_service'
require 'google/apis/core/json_representation'
require 'google/apis/core/hashable'
require 'google/apis/errors'

module Google
  module Apis
    module Oauth2V2
      
      # 
      class Tokeninfo
        include Google::Apis::Core::Hashable
      
        # Who is the intended audience for this token. In general the same as issued_to.
        # Corresponds to the JSON property `audience`
        # @return [String]
        attr_accessor :audience
      
        # The email address of the user. Present only if the email scope is present in
        # the request.
        # Corresponds to the JSON property `email`
        # @return [String]
        attr_accessor :email
      
        # The expiry time of the token, as number of seconds left until expiry.
        # Corresponds to the JSON property `expires_in`
        # @return [Fixnum]
        attr_accessor :expires_in
      
        # To whom was the token issued to. In general the same as audience.
        # Corresponds to the JSON property `issued_to`
        # @return [String]
        attr_accessor :issued_to
      
        # The space separated list of scopes granted to this token.
        # Corresponds to the JSON property `scope`
        # @return [String]
        attr_accessor :scope
      
        # The obfuscated user id.
        # Corresponds to the JSON property `user_id`
        # @return [String]
        attr_accessor :user_id
      
        # Boolean flag which is true if the email address is verified. Present only if
        # the email scope is present in the request.
        # Corresponds to the JSON property `verified_email`
        # @return [Boolean]
        attr_accessor :verified_email
        alias_method :verified_email?, :verified_email
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @audience = args[:audience] if args.key?(:audience)
          @email = args[:email] if args.key?(:email)
          @expires_in = args[:expires_in] if args.key?(:expires_in)
          @issued_to = args[:issued_to] if args.key?(:issued_to)
          @scope = args[:scope] if args.key?(:scope)
          @user_id = args[:user_id] if args.key?(:user_id)
          @verified_email = args[:verified_email] if args.key?(:verified_email)
        end
      end
      
      # 
      class Userinfo
        include Google::Apis::Core::Hashable
      
        # The user's email address.
        # Corresponds to the JSON property `email`
        # @return [String]
        attr_accessor :email
      
        # The user's last name.
        # Corresponds to the JSON property `family_name`
        # @return [String]
        attr_accessor :family_name
      
        # The user's gender.
        # Corresponds to the JSON property `gender`
        # @return [String]
        attr_accessor :gender
      
        # The user's first name.
        # Corresponds to the JSON property `given_name`
        # @return [String]
        attr_accessor :given_name
      
        # The hosted domain e.g. example.com if the user is Google apps user.
        # Corresponds to the JSON property `hd`
        # @return [String]
        attr_accessor :hd
      
        # The obfuscated ID of the user.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # URL of the profile page.
        # Corresponds to the JSON property `link`
        # @return [String]
        attr_accessor :link
      
        # The user's preferred locale.
        # Corresponds to the JSON property `locale`
        # @return [String]
        attr_accessor :locale
      
        # The user's full name.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # URL of the user's picture image.
        # Corresponds to the JSON property `picture`
        # @return [String]
        attr_accessor :picture
      
        # Boolean flag which is true if the email address is verified. Always verified
        # because we only return the user's primary email address.
        # Corresponds to the JSON property `verified_email`
        # @return [Boolean]
        attr_accessor :verified_email
        alias_method :verified_email?, :verified_email
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @email = args[:email] if args.key?(:email)
          @family_name = args[:family_name] if args.key?(:family_name)
          @gender = args[:gender] if args.key?(:gender)
          @given_name = args[:given_name] if args.key?(:given_name)
          @hd = args[:hd] if args.key?(:hd)
          @id = args[:id] if args.key?(:id)
          @link = args[:link] if args.key?(:link)
          @locale = args[:locale] if args.key?(:locale)
          @name = args[:name] if args.key?(:name)
          @picture = args[:picture] if args.key?(:picture)
          @verified_email = args[:verified_email] if args.key?(:verified_email)
        end
      end
    end
  end
end
