# 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 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
