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

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

DEFAULT_LINUX="slim"
DEFAULT_PYTHON="3.12"
DEFAULT_SCHEMA_LIB="pydantic"

docker_push() {
  version=$(poetry version -s)
  version=${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=}" .

        for tag in "${tags[@]}"; do
          docker push "${tag}"
        done
      done
    done
    cd ..
  done
  cd ..
}

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