# database

pg_image := "docker.io/postgres:18-alpine"
pg_env := "-e POSTGRES_USER -e POSTGRES_PASSWORD -e POSTGRES_DB"
pg_volume := "-v ./sql/create:/docker-entrypoint-initdb.d"
pg_health_cmd := "--health-cmd 'pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}'"
pg_health_conf := "--health-interval 10s --health-retries 3 --health-timeout 5s"
pg_health_start_period := "--health-start-period 30s"

# server

server_port := "-p 8000:8000"
server_health_cmd := "--health-cmd 'wget -q --spider http://127.0.0.1:8000/api/health || exit 1'"
server_health_conf := "--health-interval 30s --health-retries 3 --health-timeout 10s"
server_health_start_period := "--health-start-period 10s"

@_default:
    just --list

#   Start HTTP server
[group("dev")]
run:
    gleam run


#   Generate SQL queries
[group("dev")]
sql:
    gleam run -m squirrel

#   Populate the database with mock data
[group("dev")]
mock:
    gleam dev sow

#   Update project dependencies
[group("dev")]
@_deps-update:
    gleam deps update

# 󰏖  Build the server container image
[group("podman")]
[no-cd]
build-server:
    podman build -t sigo-server .

#   Run database container
[group("podman")]
[no-cd]
@init-database pod_name:
    podman run -d \
      --pod {{ pod_name }} \
      --name db \
      {{ pg_env }} \
      {{ pg_health_cmd }} {{ pg_health_conf }} {{ pg_health_start_period }} \
      {{ pg_volume }} \
      {{ pg_image }}

#   Run app container
[group("podman")]
@init-server pod_name: build-server
    podman run -d \
    --pod {{ pod_name }} \
    --name server \
    -e DATABASE_URL -e SECRET_KEY \
    {{ server_health_cmd }} \
    {{ server_health_conf }} \
    {{ server_health_start_period }} \
    sigo-server

[group("dev")]
_test:
    gleam test

[group("dev")]
@_lint:
    sqruff lint
    gleam check 

@_fmt:
    gleam format
