#!/usr/bin/env bash
set -e

source scripts/str_lib.sh
source scripts/version

LINUX_VERSIONS=("slim")
PYTHON_VERSIONS=("3.14" "3.13" "3.12" "3.11" "3.10")
SCHEMA_LIBS=("pydantic" "marshmallow" "typesystem")

DEFAULT_LINUX="${LINUX_VERSIONS[0]}"
DEFAULT_PYTHON="${PYTHON_VERSIONS[0]}"
DEFAULT_SCHEMA_LIB="${SCHEMA_LIBS[0]}"

docker_push() {
  version=$(get_version)

  cd "Dockerfiles"
  for linux in "${LINUX_VERSIONS[@]}"; do
    cd "${linux}"
    for python in "${PYTHON_VERSIONS[@]}"; do
      for schema in "${SCHEMA_LIBS[@]}"; do
        tags=("${linux}-${version}-python${python}-${schema}" "${linux}-latest-python${python}-${schema}")

        if [[ "${linux}" = "${DEFAULT_LINUX}" ]]; then
          tags=("${tags[@]}" "${version}-python${python}-${schema}" "latest-python${python}-${schema}")
        fi

        if [[ "${python}" = "${DEFAULT_PYTHON}" ]]; then
          tags=("${tags[@]}" "${linux}-${version}-${schema}" "${linux}-latest-${schema}")
        fi

        if [[ "${schema}" = "${DEFAULT_SCHEMA_LIB}" ]]; then
          tags=("${tags[@]}" "${linux}-python${python}-${version}" "${linux}-python${python}-latest")
        fi

        if [[ "${linux}" = "${DEFAULT_LINUX}" ]] && [[ "${python}" = "${DEFAULT_PYTHON}" ]]; then
          tags=("${tags[@]}" "latest-${schema}")
        fi

        if [[ "${linux}" = "${DEFAULT_LINUX}" ]] && [[ "${schema}" = "${DEFAULT_SCHEMA_LIB}" ]]; then
          tags=("${tags[@]}" "python${python}-latest")
        fi

        if [[ "${python}" = "${DEFAULT_PYTHON}" ]] && [[ "${schema}" = "${DEFAULT_SCHEMA_LIB}" ]]; then
          tags=("${tags[@]}" "${linux}-latest")
        fi

        if [[ "${linux}" = "${DEFAULT_LINUX}" ]] && [[ "${python}" = "${DEFAULT_PYTHON}" ]] && [[ "${schema}" = "${DEFAULT_SCHEMA_LIB}" ]]; then
          tags=("${tags[@]}" "latest")
        fi

        tags=("${tags[@]/#/vortico/flama:}")
        docker build "--build-arg=PYTHON_VERSION=${python}" "--build-arg=SCHEMAS_LIB=${schema}" "${tags[@]/#/--tag=}" .
        message "success" "Image built (linux=$linux, python=$python, schema=$schema)"

        for tag in "${tags[@]}"; do
          docker push "${tag}"
          message "success" "Image uploaded ($tag)"
        done
      done
    done
    cd ..
  done
  cd ..
}

if [[ "${#BASH_SOURCE[@]}" -eq 1 ]]; then
  docker_push "$@"
fi
