#!/usr/bin/python
# -*- coding: utf-8 -*-

# Copyright (c) Ansible project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later

from __future__ import absolute_import, division, print_function
__metaclass__ = type

DOCUMENTATION = '''
---
module: keycloak_realm_info

short_description: Allows obtaining Keycloak realm public information via Keycloak API

version_added: 4.3.0

description:
    - This module allows you to get Keycloak realm public information via the Keycloak REST API.

    - The names of module options are snake_cased versions of the camelCase ones found in the
      Keycloak API and its documentation at U(https://www.keycloak.org/docs-api/8.0/rest-api/index.html).

    - Attributes are multi-valued in the Keycloak API. All attributes are lists of individual values and will
      be returned that way by this module. You may pass single values for attributes when calling the module,
      and this will be translated into a list suitable for the API.

extends_documentation_fragment:
    - community.general.attributes
    - community.general.attributes.info_module

options:
    auth_keycloak_url:
        description:
            - URL to the Keycloak instance.
        type: str
        required: true
        aliases:
          - url
    validate_certs:
        description:
            - Verify TLS certificates (do not disable this in production).
        type: bool
        default: true

    realm:
        type: str
        description:
            - They Keycloak realm ID.
        default: 'master'

author:
    - Fynn Chen (@fynncfchen)
'''

EXAMPLES = '''
- name: Get a Keycloak public key
  community.general.keycloak_realm_info:
    realm: MyCustomRealm
    auth_keycloak_url: https://auth.example.com/auth
  delegate_to: localhost
'''

RETURN = '''
msg:
    description: Message as to what action was taken.
    returned: always
    type: str

realm_info:
    description:
        - Representation of the realm public information.
    returned: always
    type: dict
    contains:
        realm:
            description: Realm ID.
            type: str
            returned: always
            sample: MyRealm
        public_key:
            description: Public key of the realm.
            type: str
            returned: always
            sample: MIIBIjANBgkqhkiG9w0BAQEFAAO...
        token-service:
            description: Token endpoint URL.
            type: str
            returned: always
            sample: https://auth.example.com/auth/realms/MyRealm/protocol/openid-connect
        account-service:
            description: Account console URL.
            type: str
            returned: always
            sample: https://auth.example.com/auth/realms/MyRealm/account
        tokens-not-before:
            description: The token not before.
            type: int
            returned: always
            sample: 0
'''

from ansible_collections.community.general.plugins.module_utils.identity.keycloak.keycloak import KeycloakAPI
from ansible.module_utils.basic import AnsibleModule


def main():
    """
    Module execution

    :return:
    """
    argument_spec = dict(
        auth_keycloak_url=dict(type='str', aliases=['url'], required=True, no_log=False),
        validate_certs=dict(type='bool', default=True),

        realm=dict(default='master'),
    )

    module = AnsibleModule(argument_spec=argument_spec,
                           supports_check_mode=True)

    result = dict(changed=False, msg='', realm_info='')

    kc = KeycloakAPI(module, {})

    realm = module.params.get('realm')

    realm_info = kc.get_realm_info_by_id(realm=realm)

    result['realm_info'] = realm_info
    result['msg'] = 'Get realm public info successful for ID {realm}'.format(realm=realm)
    module.exit_json(**result)


if __name__ == '__main__':
    main()
