#!/bin/bash
set -e

# Default values
prefix=""
suffix=""

# Parse arguments
while [[ $# -gt 0 ]]; do
    case "$1" in
        --prefix)
            prefix="$2"
            shift 2
            ;;
        --suffix)
            suffix="$2"
            shift 2
            ;;
        *)
            shift
            ;;
    esac
done

# storage-monitor app registration
tee > storage-monitor-required-resource.json <<EOF
[{
    "resourceAppId": "00000003-0000-0000-c000-000000000000",
    "resourceAccess": [
        {
            "id": "75359482-378d-4052-8f01-80520e7db3cd",  # Files.ReadWrite.All
            "type": "Role"
        },
        {
            "id": "332a536c-c7ef-4017-ab91-336970924f0d",  # Sites.Read.All
            "type": "Role"
        },
        {
            "id": "97235f07-e226-4f63-ace3-39588e11d3a1",  # User.ReadBasic.All
            "type": "Role"
        },
        {
            "id": "e2a3a72e-5f79-4c64-b1b1-878b674786c9",  # Mail.ReadWrite
            "type": "Role"
        }
    ]
}]
EOF


storage_monitor_response=$(az ad app create --display-name "${prefix}ar-halo-storage-monitor${suffix}" --required-resource-accesses @storage-monitor-required-resource.json --sign-in-audience AzureADMyOrg)

echo "Created ${prefix}ar-halo-storage-monitor${suffix} Enterprise Application"

storage_monitor_object_id=$(echo "$storage_monitor_response" | jq -r ".id")
storage_monitor_client_id=$(echo "$storage_monitor_response" | jq -r ".appId")

az ad sp create --id "${storage_monitor_object_id}" -o none

echo "Created ${prefix}ar-halo-storage-monitor${suffix} App registration"
rm -f storage-monitor-required-resource.json

# Create client secret
client_secret=$(az ad app credential reset --id "${storage_monitor_object_id}" --display-name "DefaultSecret" --query "password" -o tsv)

until az ad app permission admin-consent --id ${storage_monitor_object_id} >/dev/null 2>&1; do
    echo "App registration not ready for admin consent yet, retrying in 5s..."
    sleep 5
done

echo "Please make a note of below values:"
echo "Client ID: ${storage_monitor_client_id}"
echo "Client Secret: ${client_secret}"
echo "Tenant ID: $(az account show --query tenantId)"
