#!/bin/zsh

# Creates a Kafka changelog XML file for resyncing contract VAT details
#
# Usage: ./scripts/generate.sh resync-contract-vat-details <contract_ids> <ticket_num>
#
# Example: ./scripts/generate.sh resync-contract-vat-details "123456,234567,345678" ACC-9999

# Inputs
local contract_ids=$1
local ticket_num=$2
local dev_username=$3

# Prompt for missing inputs
if [[  -z "$contract_ids" || -z "$ticket_num" || -z "$dev_username" ]]; then
  [[ -z "$contract_ids" ]] && read "?Enter contract_ids (comma separated): " contract_ids
  [[ -z "$ticket_num" ]] && read "?Enter ticket_num: " ticket_num
  [[ -z "$dev_username" ]] && read "?Enter dev_username: " dev_username
fi

# Constants
local changeset_template="./scripts/templates/resync-contract-vat-details-changeset.template.xml"
local entity_type="contract_id"
local event_type="UPDATE"
local task_name="resync_vat_details"
local template="./scripts/templates/resync-contract-vat-details.template.xml"
local topic="event.abacus.contract"
local filename="./kafka-db-deploy/kafka/build/changelog/dml/${ticket_num}_${task_name}.xml"

# Get changeset template
local changeset_template_content=$(<"$changeset_template")

# Generate changesets
local changesets=()
local counter=1
IFS=',' read -rA id_array <<< "$contract_ids"
for contract_id in "${id_array[@]}"; do
  # Trim
  contract_id=$(echo "$contract_id" | xargs)

  # Append populated changeset template
  changeset=$(echo "$changeset_template_content" | sed \
    -e "s/%ticket_num%/$ticket_num/g" \
    -e "s/%task_name%/$task_name/g" \
    -e "s/%counter%/$counter/g" \
    -e "s/%dev_username%/$dev_username/g" \
    -e "s/%topic%/$topic/g" \
    -e "s/%entity_type%/$entity_type/g" \
    -e "s/%contract_id%/$contract_id/g" \
    -e "s/%event_type%/$event_type/g")

  changesets+=("$changeset")
  ((counter++))
done

# Create the file - write header, changesets, and footer
echo '<?xml version="1.0" encoding="UTF-8"?>' > "$filename"
echo '<changelog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:/var/app/InputFileSchema.xsd">' >> "$filename"
for changeset in "${changesets[@]}"; do
  echo "$changeset" >> "$filename"
done
echo '</changelog>' >> "$filename"

# Output success
echo -e "\nXML file created: $filename"
echo -e "Total changesets: $((counter - 1))\n"
