package main
import (
"errors"
"fmt"
"os"
"skraak/cmd"
)
var commandDispatch = map[string]func([]string) error{
"import": cmd.RunImport,
"sql": cmd.RunSQL,
"create": cmd.RunCreate,
"update": cmd.RunUpdate,
"export": cmd.RunExport,
"replay": cmd.RunReplay,
"calls": cmd.RunCalls,
"xxhash": cmd.RunXXHash,
"metadata": cmd.RunMetadata,
"time": cmd.RunTime,
"isnight": cmd.RunIsNight,
"prepend": cmd.RunPrepend,
}
func main() {
if len(os.Args) < 2 {
printUsage()
os.Exit(1)
}
handler, ok := commandDispatch[os.Args[1]]
if !ok {
fmt.Fprintf(os.Stderr, "Unknown command: %s\n\n", os.Args[1])
printUsage()
os.Exit(1)
}
if err := handler(os.Args[2:]); err != nil {
if errors.Is(err, cmd.ErrHelpRequested) {
os.Exit(0)
}
fmt.Fprintf(os.Stderr, "Error: %v\n", err)
os.Exit(1)
}
}
func printUsage() {
fmt.Fprintf(os.Stderr, "Usage: %s <command> [options]\n\n", os.Args[0])
fmt.Fprintf(os.Stderr, "Commands:\n")
fmt.Fprintf(os.Stderr, " sql Execute SQL query\n")
fmt.Fprintf(os.Stderr, " calls Extract/analyze bird calls (from-preds, from-brida, from-raven, show-images, classify, summarise)\n")
fmt.Fprintf(os.Stderr, " create Create a new resource (dataset, location, cluster, pattern)\n")
fmt.Fprintf(os.Stderr, " update Update an existing resource (dataset, location, cluster, pattern)\n")
fmt.Fprintf(os.Stderr, " import Import data (folder, bulk, unstructured, segments)\n")
fmt.Fprintf(os.Stderr, " export Export dataset to new database\n")
fmt.Fprintf(os.Stderr, " replay Replay event log into database\n")
fmt.Fprintf(os.Stderr, " xxhash Compute XXH64 hash of a file\n")
fmt.Fprintf(os.Stderr, " metadata Extract WAV file metadata\n")
fmt.Fprintf(os.Stderr, " time Get current time\n")
fmt.Fprintf(os.Stderr, " isnight Check if WAV file was recorded at night\n")
fmt.Fprintf(os.Stderr, " prepend Prepend prefix to WAV files and log.txt\n")
fmt.Fprintf(os.Stderr, "\nExamples:\n")
fmt.Fprintf(os.Stderr, " %s sql --db ./db/skraak.duckdb \"SELECT COUNT(*) FROM file WHERE active = true\"\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s create dataset --db ./db/skraak.duckdb --name \"Test Dataset\"\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s update location --db ./db/skraak.duckdb --id loc123 --name \"New Name\"\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s export dataset --db ./db/skraak.duckdb --id abc123 --output export.duckdb\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s replay events --db ./backup.duckdb --log ./skraak.duckdb.events.jsonl\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s calls from-preds --csv predictions.csv > calls.json\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s xxhash --file recording.wav\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s metadata --file recording.wav\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s time\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s isnight --file recording.wav --lat -36.85 --lng 174.76\n", os.Args[0])
}