#!/usr/bin/env python

# Copyright 2021 Google LLC 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.

"""Google Analytics Admin API sample application which prints user links audit
data on the Google Analytics 4 property.

See https://developers.google.com/analytics/devguides/config/admin/v1/rest/v1alpha/properties.userLinks/audit
for more information.
"""
# [START analyticsadmin_properties_user_links_audit]
from google.analytics.admin import AnalyticsAdminServiceClient
from google.analytics.admin_v1alpha.types import AuditUserLinksRequest


def run_sample():
    """Runs the sample."""
    # TODO(developer): Replace this variable with your Google Analytics 4
    #  property ID (e.g. "123456") before running the sample.
    property_id = "YOUR-GA4-PROPERTY-ID"
    audit_property_user_links(property_id)


def audit_property_user_links(property_id):
    """Lists all user links on the Google Analytics 4 property, including
    implicit ones that come from effective permissions granted by groups or
    organization admin roles."""
    client = AnalyticsAdminServiceClient()
    results = client.audit_user_links(
        AuditUserLinksRequest(parent=f"properties/{property_id}")
    )

    print("Result:")
    for user_link in results:
        print(f"Resource name: {user_link.name}")
        print(f"Email address: {user_link.email_address}")
        for direct_role in user_link.direct_roles:
            print(f"Direct role: {direct_role}")

        for effective_role in user_link.effective_roles:
            print(f"Effective role: {effective_role}")
        print()


# [END analyticsadmin_properties_user_links_audit]


if __name__ == "__main__":
    run_sample()