# Reservation Management System — Justfile
# Wymaga: just, node 20+, npm, docker, docker compose
# Instalacja just: https://github.com/casey/just#installation

# ── Zmienne ─────────────────────────────────────────────────────────────────

API_PORT := "3001"
DEV_PORT := "5173"

# ── Domyślna komenda (lista wszystkich) ──────────────────────────────────────

default:
    @just --list

# ── Tryb deweloperski ─────────────────────────────────────────────────────────

# Zainstaluj zależności npm
install:
    npm ci

# Uruchom json-server (mock API) w tle na porcie 3001
api:
    npx json-server --watch db.json --host 0.0.0.0 --port {{API_PORT}}

# Uruchom serwer deweloperski Vite
dev:
    npm run dev

# Uruchom API i Vite równolegle (wymaga GNU parallel lub mprocs)
start: install
    #!/usr/bin/env bash
    trap 'kill 0' EXIT
    npx json-server --watch db.json --host 0.0.0.0 --port {{API_PORT}} &
    npm run dev

# ── Testy ────────────────────────────────────────────────────────────────────

# Uruchom testy jednostkowe (Vitest)
test:
    npm run test

# Uruchom testy e2e Playwright (wymaga działającego API i dev serwera)
e2e:
    node test_rms.mjs

# Uruchom WSZYSTKIE testy (jednostkowe + e2e) — startuje serwery, testuje, zamyka
test-all:
    #!/usr/bin/env bash
    set -e
    echo ">>> Uruchamianie json-server na porcie {{API_PORT}}..."
    npx json-server --watch db.json --host 0.0.0.0 --port {{API_PORT}} >/tmp/jss.log 2>&1 &
    JSS_PID=$!
    echo ">>> Uruchamianie Vite dev server na porcie {{DEV_PORT}}..."
    npm run dev >/tmp/vite.log 2>&1 &
    VITE_PID=$!
    trap "kill $JSS_PID $VITE_PID 2>/dev/null; wait $JSS_PID $VITE_PID 2>/dev/null; true" EXIT
    echo ">>> Oczekiwanie na gotowość serwerów..."
    sleep 5
    echo ""
    echo "========================================="
    echo " Vitest — testy jednostkowe"
    echo "========================================="
    npm run test -- --run
    echo ""
    echo "========================================="
    echo " Playwright — testy e2e"
    echo "========================================="
    node test_rms.mjs

# Uruchom Storybook
storybook:
    npm run storybook

# ── Budowanie ────────────────────────────────────────────────────────────────

# Zbuduj aplikację produkcyjną (VITE_API_URL=/api dla Dockera)
build:
    VITE_API_URL=/api npm run build

# Zbuduj i sprawdź lokalnie przez preview Vite (wymaga osobnego API)
preview: build
    npm run preview

# ── Docker ───────────────────────────────────────────────────────────────────

# Zbuduj obrazy Docker (frontend + api)
docker-build:
    docker compose build

# Uruchom aplikację w Dockerze (http://localhost)
docker-up:
    docker compose up -d
    @echo ""
    @echo "Aplikacja dostępna na: http://localhost"
    @echo "API (json-server):      http://localhost:{{API_PORT}}"
    @echo ""
    @echo "Zatrzymaj: just docker-down"

# Uruchom w trybie interaktywnym z logami
docker-up-logs:
    docker compose up

# Zatrzymaj kontenery
docker-down:
    docker compose down

# Zatrzymaj i usuń wolumeny (resetuje db.json do stanu z obrazu)
docker-clean:
    docker compose down -v

# Przebuduj i uruchom od zera
docker-rebuild:
    docker compose down
    docker compose build --no-cache
    docker compose up -d
    @echo "Aplikacja dostępna na: http://localhost"

# Pokaż logi kontenerów
docker-logs:
    docker compose logs -f

# Status kontenerów
docker-ps:
    docker compose ps
