# Copyright (c) 2023 VEXXHOST, 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.

- name: Create user and assert it exists inside Keystone
  hosts: all
  tasks:
    - name: Create Keycloak user
      run_once: true
      delegate_to: localhost
      community.general.keycloak_user:
        # Keycloak settings
        auth_keycloak_url: "https://{{ keycloak_host }}"
        auth_realm: master
        auth_client_id: admin-cli
        auth_username: admin
        auth_password: "{{ keycloak_admin_password }}"
        validate_certs: "{{ cluster_issuer_type != 'self-signed' }}"
        # User settings
        realm: atmosphere
        username: test-user
      register: keycloak_user_result

    - name: Set a fact with user information using "end_state" or "existing"
      run_once: true
      ansible.builtin.set_fact:
        keycloak_user_info: "{{ keycloak_user_result.existing | ternary(keycloak_user_result.existing, keycloak_user_result.end_state) }}"

    - name: Get list of all users in "atmosphere" domain
      run_once: true
      delegate_to: localhost
      vexxhost.atmosphere.identity_user_info:
        domain: atmosphere
        name: "{{ keycloak_user_info.username }}"
      register: identity_user_info_result
      # XXX(mnaser): GHA seems to be slow so the user doesn't show up right
      #              away, it could also be a Keystone caching issue, for now
      #              we try a few more times.
      retries: 30
      delay: 1
      until: identity_user_info_result.users | length > 0

    - name: Assert that the user exists
      run_once: true
      ansible.builtin.assert:
        that:
          - identity_user_info_result.users | length > 0
          - identity_user_info_result.users[0].id == keycloak_user_info.id | regex_replace('-', '')
          - identity_user_info_result.users[0].name == keycloak_user_info.username

    # TODO: Simulate Keystone authentication
    # TODO: Simulate Horizon login
