# Justfile for cc-libs
# Run `just ci` to verify local tooling and lint Lua code.

# List available recipes.
default:
    @just --list

# Install local development tooling.
install: install-git-hooks check-craftos

# Install Git hooks for this repository.
install-git-hooks:
    @mkdir -p .git/hooks
    @printf '%s\n' '#!/bin/sh' '' 'just ci' > .git/hooks/pre-commit
    @chmod +x .git/hooks/pre-commit
    @printf '%s\n' 'Installed .git/hooks/pre-commit'

# Verify the CraftOS-PC harness is installed and recent enough.
check-craftos:
    @command -v craftos >/dev/null 2>&1 || { \
        printf '%s\n' 'craftos not found on $PATH. See docs/install-craftos-pc.md.' >&2; \
        exit 1; \
    }
    @version="$(craftos --version)"; \
    number="${version##* v}"; \
    case "$number" in \
        *.*.*) \
            ;; \
        *) \
            printf '%s\n' "$version"; \
            printf '%s\n' 'Could not parse CraftOS-PC version. See docs/install-craftos-pc.md.' >&2; \
            exit 1; \
            ;; \
    esac; \
    major="${number%%.*}"; \
    rest="${number#*.}"; \
    minor="${rest%%.*}"; \
    patch="${rest#*.}"; \
    patch="${patch%%[^0-9]*}"; \
    printf '%s\n' "$version"; \
    case "$major.$minor.$patch" in \
        *[!0-9.]*|.*|*..*|*.) \
            printf '%s\n' 'Could not parse CraftOS-PC version. See docs/install-craftos-pc.md.' >&2; \
            exit 1; \
            ;; \
    esac; \
    if ! { [ "${major:-0}" -gt 2 ] || \
        { [ "${major:-0}" -eq 2 ] && [ "${minor:-0}" -gt 8 ]; } || \
        { [ "${major:-0}" -eq 2 ] && [ "${minor:-0}" -eq 8 ] && [ "${patch:-0}" -ge 3 ]; }; }; then \
        printf '%s\n' 'CraftOS-PC v2.8.3 or newer is required. See docs/install-craftos-pc.md.' >&2; \
        exit 1; \
    fi

# Local CI entry point used by Git hooks.
ci: check-craftos check test

# Placeholder for future CraftOS-PC headless integration tests.
test:
    @printf '%s\n' 'No CraftOS-PC headless integration tests yet.'

# Lint all Lua source with luacheck.
check:
    luacheck .
