#autoload

# Copyright C 2008-2009 by Isilon Systems, Inc. All rights not expressly
# granted herein are reserved.
# Created in the United States of America.
#
# This digital media is protected by U.S. and international copyright and
# intellectual property laws. Unless otherwise specified, all information
# and screens appearing as part of this digital medium, including
# software, services, documents, text, images, icons, and logos design;
# the selection, assembly, arrangement, and design thereof; and the code
# that enables its presentation, are the sole property of Isilon Systems,
# Inc.
#
# Except as otherwise required by applicable law, no part of any
# copyrighted material may be reproduced, modified, translated,
# distributed, published, or transmitted by any means, electronic or
# mechanical, for any purpose, without the prior written consent of Isilon
# Systems.
#
# Isilon and Isilon Systems are registered trademarks of Isilon Systems,
# Inc.  Legion is a trademark of Isilon Systems, Inc.  All other
# trademarks and registered trademarks are the property of their
# respective holders.


(( $+functions[__isi_classic_smb] )) ||
_isi_classic_smb() {
  if (( CURRENT == 2 )); then
    _tags values && { compadd $@ share permission config session file log-level }
  else
    local cmd=${words[2]}
    (( CURRENT-- ))
    shift words
    if [[ $cmd == share ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-share:"
      _isi_classic_smb_share
    elif [[ $cmd == permission ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-permission:"
      _isi_classic_smb_permission
    elif [[ $cmd == config ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-config:"
      _isi_classic_smb_config
    elif [[ $cmd == session ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-session:"
      _isi_classic_smb_session
    elif [[ $cmd == file ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-file:"
      _isi_classic_smb_file
    elif [[ $cmd == log-level ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-log-level:"
      _isi_classic_smb_log-level
    else
      _message "unknown isi smb command: $words[1]"
    fi
  fi
}

(( $+functions[_isi_classic_smb_share] )) ||
_isi_classic_smb_share() {
  if (( CURRENT == 2 )); then
    _tags values && { compadd $@ list create modify delete }
  else
    local cmd=${words[2]}
    (( CURRENT-- ))
    shift words
    if [[ $cmd == list ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-share-list:"
      _isi_classic_smb_share_list
    elif [[ $cmd == create ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-share-create:"
      _isi_classic_smb_share_create
    elif [[ $cmd == modify ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-share-modify:"
      _isi_classic_smb_share_modify
    elif [[ $cmd == delete ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-share-delete:"
      _isi_classic_smb_share_delete
    else
      _message "unknown isi smb share command: $words[1]"
    fi
  fi
}

(( $+functions[_isi_classic_smb_permission] )) ||
_isi_classic_smb_permission() {
  if (( CURRENT == 2 )); then
    _tags values && { compadd $@ list create modify delete }
  else
    local cmd=${words[2]}
    (( CURRENT-- ))
    shift words
    if [[ $cmd == list ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-permission-list:"
      _isi_classic_smb_permission_list
    elif [[ $cmd == create ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-permission-create:"
      _isi_classic_smb_permission_create
    elif [[ $cmd == modify ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-permission-modify:"
      _isi_classic_smb_permission_modify
    elif [[ $cmd == delete ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-permission-delete:"
      _isi_classic_smb_permission_delete
    else
      _message "unknown isi smb permission command: $words[1]"
    fi
  fi
}

(( $+functions[_isi_classic_smb_config] )) ||
_isi_classic_smb_config() {
  if (( CURRENT == 2 )); then
    _tags values && { compadd $@ global share }
  else
    local cmd=${words[2]}
    (( CURRENT-- ))
    shift words
    if [[ $cmd == global ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-config-global:"
      _isi_classic_smb_config_global
    elif [[ $cmd == share ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-config-share:"
      _isi_classic_smb_config_share
    else
      _message "unknown isi smb config command: $words[1]"
    fi
  fi
}

(( $+functions[_isi_classic_smb_session] )) ||
_isi_classic_smb_session() {
  if (( CURRENT == 2 )); then
    _tags values && { compadd $@ list delete }
  else
    local cmd=${words[2]}
    (( CURRENT-- ))
    shift words
    if [[ $cmd == list ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-session-list:"
      _isi_classic_smb_session_list
    elif [[ $cmd == delete ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-config-delete:"
      _isi_classic_smb_session_delete
    else
      _message "unknown isi smb session command: $words[1]"
    fi
  fi
}

(( $+functions[_isi_classic_smb_file] )) ||
_isi_classic_smb_file() {
  if (( CURRENT == 2 )); then
    _tags values && { compadd $@ list close }
  else
    local cmd=${words[2]}
    (( CURRENT-- ))
    shift words
    if [[ $cmd == list ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-file-list:"
      _isi_classic_smb_file_list
    elif [[ $cmd == close ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-file-close:"
      _isi_classic_smb_file_close
    else
      _message "unknown isi smb file command: $words[1]"
    fi
  fi
}

(( $+functions[_isi_classic_smb_config_global] )) ||
_isi_classic_smb_config_global() {
  if (( CURRENT == 2 )); then
    _tags values && { compadd $@ list modify revert }
  else
    local cmd=${words[2]}
    (( CURRENT-- ))
    shift words
    if [[ $cmd == list ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-config-global-list:"
      _isi_classic_smb_config_global_list
    elif [[ $cmd == modify ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-config-global-modify:"
      _isi_classic_smb_config_global_modify
    elif [[ $cmd == revert ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-config-global-revert:"
      _isi_classic_smb_config_global_revert
    else
      _message "unknown isi smb config global command: $words[1]"
    fi
  fi
}

(( $+functions[_isi_classic_smb_config_share] )) ||
_isi_classic_smb_config_share() {
  if (( CURRENT == 2 )); then
    _tags values && { compadd $@ list modify revert }
  else
    local cmd=${words[2]}
    (( CURRENT-- ))
    shift words
    if [[ $cmd == list ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-config-share-list:"
      _isi_classic_smb_config_share_list
    elif [[ $cmd == modify ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-config-share-modify:"
      _isi_classic_smb_config_share_modify
    elif [[ $cmd == revert ]]; then
      curcontext="${curcontext%:*:*}:isi_classic-smb-config-share-revert:"
      _isi_classic_smb_config_share_revert
    else
      _message "unknown isi smb config share command: $words[1]"
    fi
  fi
}

(( $+functions[_isi_classic_smb_config_global_list] )) ||
_isi_classic_smb_config_global_list() {
  _arguments \
    '--verbose[Print verbose output]' \
    '--help[Print usage help and exit]'
}

(( $+functions[_isi_classic_smb_config_global_modify] )) ||
_isi_classic_smb_config_global_modify() {
  _arguments \
    '--access-based-share-enum=[true/false]' \
    '--audit-fileshare=[all/success/failure/none]' \
    '--audit-global-sacl-failure=[accessmask token list]' \
    '--audit-global-sacl-success=[accessmask token list]' \
    '--audit-logon=[all/success/failure/none]' \
    '--dot-snap-accessible-child=[true/false]' \
    '--dot-snap-accessible-root=[true/false]' \
    '--dot-snap-visible-child=[true/false]' \
    '--dot-snap-visible-root=[true/false]' \
    '--enable-security-signatures=[true/false]' \
    '--ignore-eas=[true/false]' \
    '--onefs-cpu-multiplier=[1 to 4]' \
    '--onefs-num-workers=[0 to 1024]' \
    '--require-security-signatures=[true/false]' \
    '--security-mode=[anonymous/user]' \
    '--server-string=[Description of the server]' \
    '--smb2-client-credit-limit=[1 to 128]' \
    '--smb2-client-credit-start=[1 to 32]' \
    '--smb2-global-credit-limit=[1 to 3200000]' \
    '--support-smb2=[true/false]' \
    '--srv-cpu-multiplier=[1 to 8]' \
    '--srv-num-workers=[0 to 1024]' \
    '--help[Print usage help and exit]'
}

(( $+functions[_isi_classic_smb_config_global_revert] )) ||
_isi_classic_smb_config_global_revert() {
  _arguments \
    '--access-based-share-enum' \
    '--audit-fileshare' \
    '--audit-global-sacl-failure' \
    '--audit-global-sacl-success' \
    '--audit-logon' \
    '--dot-snap-accessible-child' \
    '--dot-snap-accessible-root' \
    '--dot-snap-visible-child' \
    '--dot-snap-visible-root' \
    '--enable-security-signatures' \
    '--ignore-eas' \
    '--onefs-num-workers' \
    '--require-security-signatures' \
    '--smb2-client-credit-limit' \
    '--smb2-client-credit-start' \
    '--smb2-global-credit-limit' \
    '--support-smb2' \
    '--srv-num-workers' \
    '--help[Print usage help and exit]'
}

(( $+functions[_isi_classic_smb_config_share_list] )) ||
_isi_classic_smb_config_share_list() {
  _arguments \
    '--defaults[Print Default values with changed values]'\
    '--verbose[Print verbose output]' \
    '--sharename=[Name of the share]' \
    '--help[Print usage help and exit]'
}

(( $+functions[_isi_classic_smb_config_share_modify] )) ||
_isi_classic_smb_config_share_modify() {
  _arguments \
    '--access-based-enumeration=[true/false]' \
    '--access-based-enumeration-root-only=[true/false]' \
    '--allow-delete-readonly=[true/false]' \
    '--allow-execute-always=[true/false]' \
    '--change-notify=[all/norecurse/none]' \
    '--create-permissions=[default acl/inherit mode bits/use create mask and mode]' \
    '--directory-create-mask=[0 to 511]' \
    '--directory-create-mode=[0 to 511]' \
    '--file-create-mask=[0 to 511]' \
    '--file-create-mode=[0 to 511]' \
    '--hide-dot-files=[true/false]' \
    '--strict-flush=[true/false]' \
    '--host-acl=[host access list]' \
    '--impersonate-guest=[always/bad user/never]' \
    '--impersonate-user=[user name]' \
    '--mangle-byte-start=[wchar_t from 256 to 65535]' \
    '--mangle-map=[wchar_t:wchar_t, wchar_t:wchar_t]' \
    '--ntfs-acl-support=[true/false]' \
    '--oplocks=[true/false]' \
    '--strict-locking=[true/false]' \
    '--sharename=[Name of the share]' \
    '--help[Print usage help and exit]'
}

(( $+functions[_isi_classic_smb_config_share_revert] )) ||
_isi_classic_smb_config_share_revert() {
  _arguments \
    '--access-based-enumeration' \
    '--access-based-enumeration-root-only' \
    '--allow-delete-readonly' \
    '--allow-execute-always' \
    '--change-notify' \
    '--create-permissions' \
    '--directory-create-mask' \
    '--directory-create-mode' \
    '--file-create-mask' \
    '--file-create-mode' \
    '--hide-dot-files' \
    '--host-acl=[host access list]' \
    '--impersonate-guest' \
    '--impersonate-user' \
    '--mangle-byte-start' \
    '--mangle-map' \
    '--ntfs-acl-support' \
    '--oplocks' \
    '--strict-locking' \
    '--sharename=[Name of the share]' \
    '--help[Print usage help and exit]'
}

(( $+functions[_isi_classic_smb_share_list] )) ||
_isi_classic_smb_share_list() {
  _arguments \
    '--verbose[Print verbose output]' \
    '--sharename=[Name of specific share]' \
    '--help[Print usage help and exit]'
}

(( $+functions[_isi_classic_smb_share_create] )) ||
_isi_classic_smb_share_create() {
  _arguments \
    '--sharename=[Name of specific share]' \
    '--allow-variable-expansion=[yes or no]'\
    '--auto-create-directory=[yes or no]'\
    '--path=[Full path of the directory]' \
    '--inheritable-acl=[yes or no]' \
    '--comment=[Description of share]' \
    '--csc-policy=[manual documents programs none]' \
    '--browsable=[Visibility in browse list]' \
    '--help[Print usage help and exit]'
}

(( $+functions[_isi_classic_smb_share_delete] )) ||
_isi_classic_smb_share_delete() {
  _arguments \
    '--sharename=[Name of specific share]' \
    '--help[Print usage help and exit]'
}

(( $+functions[_isi_classic_smb_share_modify] )) ||
_isi_classic_smb_share_modify() {
  _arguments \
    '--sharename=[Name of specific share]' \
    '--name=[New name for the share]' \
    '--path=[New full path of the directory]' \
    '--comment=[Description of share]' \
    '--csc-policy=[manual documents programs none]' \
    '--browsable=[Visibility in browse list]' \
    '--help[Print usage help and exit]' \
    '--allow-variable-expansion[yes or no]' \
    '--auto-create-directory[yes or now]'
}

(( $+functions[_isi_classic_smb_permission_list] )) ||
_isi_classic_smb_permission_list() {
  _arguments \
    '--sharename=[Name of specific share]' \
    '--help[Print usage help and exit]'
}

(( $+functions[_isi_classic_smb_permission_create] )) ||
_isi_classic_smb_permission_create() {
  _arguments \
    '--sharename=[Name of specific share]' \
    '--account-name=[Name of the account]' \
    '--sid=[SID of the account]' \
    '--account-type=[user or group or builtin]' \
    '--permission-type=[allow or deny]' \
    '--permission=[run-as-root full change read]' \
    '--help[Print usage help and exit]'
}

(( $+functions[_isi_classic_smb_permission_delete] )) ||
_isi_classic_smb_permission_delete() {
  _arguments \
    '--sharename=[Name of specific share]' \
    '--account-name=[Name of the account]' \
    '--sid=[SID of the account]' \
    '--account-type=[user or group or builtin]' \
    '--permission-type=[allow or deny]' \
    '--permission=[run-as-root full change read]' \
    '--all[Act on all permissions]' \
    '--help[Print usage help and exit]'
}

(( $+functions[_isi_classic_smb_permission_modify] )) ||
_isi_classic_smb_permission_modify() {
  _arguments \
    '--sharename=[Name of specific share]' \
    '--account-name=[Name of the account]' \
    '--sid=[SID of the account]' \
    '--account-type=[user or group or builtin]' \
    '--permission-type=[allow or deny]' \
    '--permission=[run-as-root full change read]' \
    '--help[Print usage help and exit]'
}

(( $+functions[_isi_classic_smb_session_list] )) ||
_isi_classic_smb_session_list() {
  _arguments \
    '--computer-name[IP address of the specific client]' \
    '--help[Print usage help and exit]'
}

(( $+functions[_isi_classic_smb_session_delete] )) ||
_isi_classic_smb_session_delete() {
  _arguments \
    '--computer-name=[IP address of the specific client]' \
    '--user-name=[Domain\\User-name for the specific session to be deleted]' \
    '--force[force delete all the sessions from a client]' \
    '--help[Print usage help and exit]'
}

(( $+functions[_isi_classic_smb_file_list] )) ||
_isi_classic_smb_file_list() {
  _arguments \
    '--file-id[ID of the file to list]' \
    '--help[Print usage help and exit]'
}

(( $+functions[_isi_classic_smb_file_close] )) ||
_isi_classic_smb_file_close() {
  _arguments \
    '--file-id[ID of the file to close]' \
    '--help[Print usage help and exit]'
}

(( $+functions[_isi_classic_smb_log-level] )) ||
_isi_classic_smb_log-level() {
  _arguments \
    '--set=[Set the log level for this node. Valid options are: always, error, warning, info, debug, verbose, or trace]' \
    '--help[Print usage help and exit]'
}
