#!/bin/bash

# This script look inside publish_channels for all tracks that should exits.
# If the track does not exist, it creates it.

if ! command -v charmcraft &> /dev/null
then
    echo "charmcraft could not be found"
    echo "Install it with: snap install charmcraft --classic"
    exit 1
fi

if ! command -v yq &> /dev/null
then
    echo "yq could not be found"
    echo "Install it with: snap install yq"
    exit 1
fi

if ! command -v jq &> /dev/null
then
    echo "jq could not be found"
    echo "Install it with: snap install jq"
    exit 1
fi

if ! command -v curl &> /dev/null
then
    echo "curl could not be found"
    echo "Install it with: apt install curl"
    exit 1
fi

opt_charm=""

publish_channel=$(yq -r '.[0].project.vars.publish_channels | to_entries | .[] | (.key + " " + .value)' zuul.d/zuul.yaml)

while IFS=' ' read -r charm _; do
    opt_charm="$opt_charm --charm=$charm"
done < <(echo "$publish_channel")


charmcraft login --export=sunbeam-charms.auth \
    $opt_charm \
    --permission=package-view-metadata \
    --permission=package-manage-metadata \
    --ttl=3600

CHARMHUB_MACAROON_HEADER="Authorization: Macaroon $(cat sunbeam-charms.auth | base64 -d | jq -r .v)"

while IFS=' ' read -r charm channel; do
    track=$(echo "$channel" | cut -d'/' -f1)
    url=https://api.charmhub.io/v1/charm/$charm
    metadata=$(curl -s "$url" -H'Content-type: application/json' -H "$CHARMHUB_MACAROON_HEADER")
    tracks=$(echo "$metadata" | jq -r '.metadata.tracks[].name')
    if [[ $tracks =~ $track ]]; then
        echo "Track $track already exists for charm $charm"
    else
        echo "Creating track $track for charm $charm"
        curl -s "$url/tracks" -X POST -H'Content-type: application/json' -H "$CHARMHUB_MACAROON_HEADER" -d '[{"name": "'"$track"'"}]'
    fi
done < <(echo "$publish_channel")

# Clean the created files
rm sunbeam-charms.*