#!/usr/bin/bash
# [MISE] hide=true
# [MISE] tools={"jq"="latest"}
# [USAGE] arg "<task_name>" help="Name of task to run in docker"
# [USAGE] arg "[task_cmd]" help="Full task command to run in docker if different from task name"

set -o errexit
set -o pipefail

command=${usage_task_cmd:-${usage_task_name}}

tag_name=$(mktemp --dry-run mise-docker-XXXXXXX --suffix=":10h" | tr '[:upper:]' '[:lower:]')

docker build --file "${MISE_TASK_DIR}/Dockerfile.task" \
  --build-arg task="${command}" \
  --build-arg MORTENLJ_MISE_LIB_VERSION="${MORTENLJ_MISE_LIB_VERSION}" \
  --build-arg MORTENLJ_MISE_LIB_CLEAN_VERSION="${MORTENLJ_MISE_LIB_CLEAN_VERSION}" \
  --tag "${tag_name}" \
  .

container_id=$(docker container create "${tag_name}")
filelist=$(mktemp file-list-XXXXXX --suffix=".txt")
docker cp "${container_id}:/app/filelist.txt" "${filelist}"

mapfile -t patterns < <(mise tasks info "${usage_task_name?}" --json | jq -r '.outputs[]')

while IFS= read -r line; do
  if [[ -n "${line}" ]]; then # Process non-empty lines
    for pattern in "${patterns[@]}"; do
      pattern="./${pattern}"
      # shellcheck disable=SC2053
      if [[ "${line}" == ${pattern} ]]; then
        mkdir -p "$(dirname "${line}")"
        docker cp "${container_id}:/app/${line}" "${line}"
      fi
    done
  fi
done < "${filelist}"
rm "${filelist}"
docker container rm "${container_id}"
