package filexfer

import (
	"fmt"
)

// Status defines the SFTP error codes used in SSH_FXP_STATUS response packets.
type Status uint32

// Defines the various SSH_FX_* values.
const (
	// see draft-ietf-secsh-filexfer-02
	// https://tools.ietf.org/html/draft-ietf-secsh-filexfer-02#section-7
	StatusOK = Status(iota)
	StatusEOF
	StatusNoSuchFile
	StatusPermissionDenied
	StatusFailure
	StatusBadMessage
	StatusNoConnection
	StatusConnectionLost
	StatusOPUnsupported

	// https://tools.ietf.org/html/draft-ietf-secsh-filexfer-03#section-7
	StatusV4InvalidHandle
	StatusV4NoSuchPath
	StatusV4FileAlreadyExists
	StatusV4WriteProtect

	// https://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-7
	StatusV4NoMedia

	// https://tools.ietf.org/html/draft-ietf-secsh-filexfer-05#section-7
	StatusV5NoSpaceOnFilesystem
	StatusV5QuotaExceeded
	StatusV5UnknownPrincipal
	StatusV5LockConflict

	// https://tools.ietf.org/html/draft-ietf-secsh-filexfer-06#section-8
	StatusV6DirNotEmpty
	StatusV6NotADirectory
	StatusV6InvalidFilename
	StatusV6LinkLoop

	// https://tools.ietf.org/html/draft-ietf-secsh-filexfer-07#section-8
	StatusV6CannotDelete
	StatusV6InvalidParameter
	StatusV6FileIsADirectory
	StatusV6ByteRangeLockConflict
	StatusV6ByteRangeLockRefused
	StatusV6DeletePending

	// https://tools.ietf.org/html/draft-ietf-secsh-filexfer-08#section-8.1
	StatusV6FileCorrupt

	// https://tools.ietf.org/html/draft-ietf-secsh-filexfer-10#section-9.1
	StatusV6OwnerInvalid
	StatusV6GroupInvalid

	// https://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-9.1
	StatusV6NoMatchingByteRangeLock
)

func (f Status) Error() string {
	return f.String()
}

func (f Status) String() string {
	switch f {
	case StatusOK:
		return "SSH_FX_OK"
	case StatusEOF:
		return "SSH_FX_EOF"
	case StatusNoSuchFile:
		return "SSH_FX_NO_SUCH_FILE"
	case StatusPermissionDenied:
		return "SSH_FX_PERMISSION_DENIED"
	case StatusFailure:
		return "SSH_FX_FAILURE"
	case StatusBadMessage:
		return "SSH_FX_BAD_MESSAGE"
	case StatusNoConnection:
		return "SSH_FX_NO_CONNECTION"
	case StatusConnectionLost:
		return "SSH_FX_CONNECTION_LOST"
	case StatusOPUnsupported:
		return "SSH_FX_OP_UNSUPPORTED"
	case StatusV4InvalidHandle:
		return "SSH_FX_INVALID_HANDLE"
	case StatusV4NoSuchPath:
		return "SSH_FX_NO_SUCH_PATH"
	case StatusV4FileAlreadyExists:
		return "SSH_FX_FILE_ALREADY_EXISTS"
	case StatusV4WriteProtect:
		return "SSH_FX_WRITE_PROTECT"
	case StatusV4NoMedia:
		return "SSH_FX_NO_MEDIA"
	case StatusV5NoSpaceOnFilesystem:
		return "SSH_FX_NO_SPACE_ON_FILESYSTEM"
	case StatusV5QuotaExceeded:
		return "SSH_FX_QUOTA_EXCEEDED"
	case StatusV5UnknownPrincipal:
		return "SSH_FX_UNKNOWN_PRINCIPAL"
	case StatusV5LockConflict:
		return "SSH_FX_LOCK_CONFLICT"
	case StatusV6DirNotEmpty:
		return "SSH_FX_DIR_NOT_EMPTY"
	case StatusV6NotADirectory:
		return "SSH_FX_NOT_A_DIRECTORY"
	case StatusV6InvalidFilename:
		return "SSH_FX_INVALID_FILENAME"
	case StatusV6LinkLoop:
		return "SSH_FX_LINK_LOOP"
	case StatusV6CannotDelete:
		return "SSH_FX_CANNOT_DELETE"
	case StatusV6InvalidParameter:
		return "SSH_FX_INVALID_PARAMETER"
	case StatusV6FileIsADirectory:
		return "SSH_FX_FILE_IS_A_DIRECTORY"
	case StatusV6ByteRangeLockConflict:
		return "SSH_FX_BYTE_RANGE_LOCK_CONFLICT"
	case StatusV6ByteRangeLockRefused:
		return "SSH_FX_BYTE_RANGE_LOCK_REFUSED"
	case StatusV6DeletePending:
		return "SSH_FX_DELETE_PENDING"
	case StatusV6FileCorrupt:
		return "SSH_FX_FILE_CORRUPT"
	case StatusV6OwnerInvalid:
		return "SSH_FX_OWNER_INVALID"
	case StatusV6GroupInvalid:
		return "SSH_FX_GROUP_INVALID"
	case StatusV6NoMatchingByteRangeLock:
		return "SSH_FX_NO_MATCHING_BYTE_RANGE_LOCK"
	default:
		return fmt.Sprintf("SSH_FX_UNKNOWN(%d)", f)
	}
}
