#compdef ssr
# zsh completion for ssr — System Sync & Restore.
# Install: copy or symlink into a directory on $fpath, then `autoload -Uz _ssr`.

_ssr() {
    local context state line
    typeset -A opt_args

    local -a commands=(
        'install:First-time install (link binary, seed config, schedule sync)'
        'sync:Run a backup → cloud'
        'restore:Restore a machine (defaults to cloud Brewfile)'
        'update:Pull latest ssr code, refresh launchd if needed'
        'schedule:Manage the scheduled launchd sync job'
        'config:Show or edit the active config file'
        'completions:Install or remove shell completions'
        'status:Show last sync time, cloud target, schedule state'
        'mackup:Manage auto-generated Mackup app definitions'
        'version:Print version'
        'help:Show top-level help'
    )

    _arguments -C \
        '(-h --help)'{-h,--help}'[Show help]' \
        '(-c --config)'{-c,--config}'[Use a specific config file]:path:_files' \
        '1: :->cmd' \
        '*::arg:->args'

    case "$state" in
        cmd)
            _describe -t commands 'ssr command' commands
            ;;
        args)
            case "${line[1]}" in
                restore)
                    _arguments \
                        '(-h --help)'{-h,--help}'[Show help]' \
                        '1:Brewfile:_files'
                    ;;
                update)
                    _arguments \
                        '(-h --help)'{-h,--help}'[Show help]' \
                        '(-n --dry-run)'{-n,--dry-run}'[Preview without pulling]'
                    ;;
                schedule)
                    _values 'schedule action' \
                        'on[Enable scheduled sync]' \
                        'off[Disable scheduled sync]' \
                        'status[Show schedule state]'
                    ;;
                config)
                    _values 'config action' \
                        'show[Print active config]' \
                        'edit[Open config in $EDITOR]' \
                        'path[Print config path]'
                    ;;
                completions)
                    _values 'completions action' \
                        'install[Install shell completions]' \
                        'uninstall[Remove shell completions]' \
                        'status[Show installed completions]'
                    ;;
                mackup)
                    _values 'mackup action' \
                        'scan[Suggest and confirm ssr-*.cfg files]' \
                        'list[List generated ssr-*.cfg files]' \
                        'clean[Remove all generated ssr-*.cfg files]' \
                        'unlink[undo symlink Mackup — legacy recovery]'
                    ;;
            esac
            ;;
    esac
}

_ssr "$@"
