#!/usr/bin/env bash
set -e

cat >access.yml <<EOF
pallav:
  fixedArgsCommands:
    build:
      - base
      - workspace
      - all
    update:
      - access
    clean:
    status:
  multiArgsCommands:
    remove:
      - pallav
      - palak
      - param
      - darshan
  arbitArgsCommands:
    - rmi
EOF

source ./validate_command_access.sh

testcase() {
  local desc="$1"
  shift
  if validate_command pallav "$@"; then
    echo "PASS: $desc"
  else
    echo "FAIL: $desc"
  fi
}

# ----- Fixed Args Commands -----
testcase "build base (valid)" build base
testcase "build all (valid)" build all
testcase "build base workspace (invalid)" build base workspace || true
testcase "build (no arg, invalid)" build || true
testcase "update access (valid)" update access
testcase "clean (zero-arg, valid)" clean
testcase "clean with arg (invalid)" clean foo || true

testcase "status (zero-arg, valid)" status
testcase "status foo (invalid)" status foo || true

# ----- Multi Args Commands -----
testcase "remove palak (valid)" remove palak
testcase "remove param palak (valid, any order)" remove param palak
testcase "remove palak param darshan (valid, any order)" remove palak param darshan
testcase "remove pallav (valid)" remove pallav -f
testcase "remove (no arg, invalid)" remove || true
testcase "remove foo (invalid)" remove foo || true
testcase "remove palak palak (duplicate, invalid)" remove palak palak || true

# ----- Arbitrary Args Commands -----
testcase "rmi no args (valid)" rmi
testcase "rmi one arg (valid)" rmi image1
testcase "rmi multiple args (valid)" rmi image1 image2 image3
testcase "rmi with flag (valid)" rmi -f image1 image2
testcase "rmi with only flag (valid)" rmi -f

# ----- Disallowed command -----
testcase "foo (invalid command)" foo image1 # should fail