# just as the engine: the interface is a justfile, the logic stays in lib/*.sh.
# Recipes are shebang recipes, so a whole body runs in ONE sh that sources
# lib/ once; what is measured is just's own overhead on top of the shell.

set export

MYOS_ROOT := env_var_or_default("MYOS_ROOT", "/Users/aya/dev/myos")
WORKDIR   := env_var_or_default("WORKDIR", justfile_directory())
ENV       := env_var_or_default("ENV", "local")
USER      := env_var_or_default("USER", "tester")
HOSTNAME  := env_var_or_default("HOSTNAME", "testhost")
DOMAIN    := env_var_or_default("DOMAIN", "example.test")
DRYRUN    := env_var_or_default("DRYRUN", "true")

# a recipe that does nothing: the fixed cost of just + one sh + sourcing lib/
noop:
    #!/bin/sh
    for m in core str var tags naming stack config compose hooks; do . $MYOS_ROOT/lib/$m.sh; done

# up STACKS: resolve every stack of the groups, group by compose project,
# print one compose command per project (what bin/myos does)
up +stacks:
    #!/bin/sh
    for m in core str var tags naming stack config compose hooks; do . $MYOS_ROOT/lib/$m.sh; done
    rows=""
    for ref in $(myos_group_expand {{stacks}}); do
      files=""
      for d in $(myos_stack_dirs "$ref"); do
        files="$files $(myos_compose_files "$d" "docker-compose $(myos_stack_name "$ref")" "$(myos_compose_suffixes)" "$ENV" | tr '\n' ' ')"
      done
      app=$(myos_stack_name "$ref")
      project=$(myos_project_name "$(myos_scope "$ref")" "$USER" "$ENV" "$app")
      rows="$rows
    $project|$files"
    done
    for project in $(printf '%s\n' "$rows" | sed '/^$/d' | cut -d'|' -f1 | awk '!s[$0]++'); do
      files=$(printf '%s\n' "$rows" | awk -F'|' -v p="$project" '$1==p {print $2}' | tr ' ' '\n' | sed '/^$/d' | awk '!s[$0]++')
      fargs=""; for f in $files $MYOS_ROOT/share/compose/networks.yml; do fargs="$fargs -f $f"; done
      echo "docker compose$fargs -p $project up -d"
    done

# export STACKS: every setting the hooks of the stacks declare
export +stacks:
    #!/bin/sh
    for m in core str var tags naming stack config compose hooks; do . $MYOS_ROOT/lib/$m.sh; done
    refs=$(myos_group_expand {{stacks}})
    for ref in $refs; do
      for d in $(myos_stack_dirs "$ref"); do myos_stack_hooks "$d" "$(myos_stack_name "$ref")"; done
    done
    names=$(for ref in $refs; do for d in $(myos_stack_dirs "$ref"); do
      [ -f "$d/_stack.sh" ] && sed -n 's/^myos_default_\([A-Za-z_][A-Za-z0-9_]*\)().*/\1/p' "$d/_stack.sh"; done; done | sort -u)
    for v in $names; do printf '%s=%s\n' "$v" "$(myos_var "$v")"; done
