#!/usr/bin/env bash

set -x
set -euo pipefail

ROOT=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd)
source ${ROOT}/../lib.sh

remote_config=${CONFIG_PATH}
local_config=/tmp/config.yaml
download_blob "${remote_config}" "${local_config}"

region=$(yq '.region' "${local_config}")
logical_region_name=$(yq '.name' "${local_config}")
env=$(yq '.env' "${local_config}")
vendor=$(yq '.cloudProvider' "${local_config}")
cluster=$(yq '.k8s.name' "${local_config}")
aks_oidc_issuer=$(yq '.k8s.oidcIssuer' "${local_config}")
image_registry=$(yq '.imageRegistry' "${local_config}")
aks_resource_group="$cluster"
storage_account_name="o11y$env$logical_region_name"
subscription_id=$(yq '.azure.controlplaneSubscriptionId' "${local_config}")

az storage account create \
  --name $storage_account_name \
  --resource-group $aks_resource_group \
  --sku Standard_ZRS \
  --kind StorageV2 \
  --encryption-services blob \
  --public-network-access Enabled \
  --https-only true \
  --min-tls-version TLS1_2 \
  --access-tier Hot

loki_blob_container="loki-$env-$logical_region_name"
vmbackup_blob_container="vmbackup-$env-$logical_region_name"
diag_blob_container="diag-$env-$logical_region_name"
velero_cluster_backup_blob_container="velero-cluster-backup-$env-$logical_region_name"
o11y_prod_blob_container="o11y-$env-shared-$logical_region_name"
o11y_test_blob_container="o11y-test-shared-$logical_region_name"

# create blob container
az storage container create --name $loki_blob_container --public-access off --account-name $storage_account_name
az storage container create --name $vmbackup_blob_container --public-access off --account-name $storage_account_name
az storage container create --name $diag_blob_container --public-access off --account-name $storage_account_name
az storage container create --name $velero_cluster_backup_blob_container --public-access off --account-name $storage_account_name
az storage container create --name $o11y_prod_blob_container --public-access off --account-name $storage_account_name

if [[ $env == "prod" ]]; then
  az storage container create --name $o11y_test_blob_container --public-access off --account-name $storage_account_name
fi

# set blob loki lifecycle policy
policy_json=$(cat <<EOF
{
    "rules": [
        {
            "enabled": true,
            "name": "delete_90_days",
            "type": "Lifecycle",
            "definition": {
                "actions": {
                    "baseBlob": {
                        "delete": {
                            "daysAfterModificationGreaterThan": 91
                        }
                    }
                },
                "filters": {
                    "prefixMatch": [
                        "${loki_blob_container}/fake"
                    ],
                    "blobTypes": ["blockBlob"]
                }
            }
        }
    ]
}
EOF
)

az storage account management-policy create \
  --account-name $storage_account_name \
  --resource-group $aks_resource_group \
  --policy "$policy_json"

local_output=/tmp/output.yaml
remote_output=$(yq '.outputPath' "${local_config}")
cat <<EOF > "${local_output}"
blobstorage:
  resourceGroup: $aks_resource_group
  accountName: $storage_account_name
  container:
    loki: $loki_blob_container
    vmbackup: $vmbackup_blob_container
    diag: $diag_blob_container
    veleroClusterBackup: $velero_cluster_backup_blob_container
    o11yProd: $o11y_prod_blob_container
    o11yTest: $o11y_test_blob_container
EOF
echo "Write output to storage..."
upload_blob "${local_output}" "${remote_output}" --overwrite
