package ajp13

// HTTPMethod denotes the HTTP method used
type HTTPMethod uint8

const (
	Options         = HTTPMethod(iota + 1)
	Get             = HTTPMethod(iota + 1)
	Head            = HTTPMethod(iota + 1)
	Post            = HTTPMethod(iota + 1)
	Put             = HTTPMethod(iota + 1)
	Delete          = HTTPMethod(iota + 1)
	Trace           = HTTPMethod(iota + 1)
	PropFind        = HTTPMethod(iota + 1)
	PropPatch       = HTTPMethod(iota + 1)
	MkCol           = HTTPMethod(iota + 1)
	Copy            = HTTPMethod(iota + 1)
	Move            = HTTPMethod(iota + 1)
	Lock            = HTTPMethod(iota + 1)
	Unlock          = HTTPMethod(iota + 1)
	Acl             = HTTPMethod(iota + 1)
	Report          = HTTPMethod(iota + 1)
	VersionControl  = HTTPMethod(iota + 1)
	CheckIn         = HTTPMethod(iota + 1)
	CheckOut        = HTTPMethod(iota + 1)
	UnCheckOut      = HTTPMethod(iota + 1)
	Search          = HTTPMethod(iota + 1)
	MkWorkspace     = HTTPMethod(iota + 1)
	Update          = HTTPMethod(iota + 1)
	Label           = HTTPMethod(iota + 1)
	Merge           = HTTPMethod(iota + 1)
	BaselineControl = HTTPMethod(iota + 1)
	MkActivity      = HTTPMethod(iota + 1)
)

func (method HTTPMethod) String() string {
	switch method {
	case Options:
		return "OPTIONS"
	case Get:
		return "GET"
	case Head:
		return "HEAD"
	case Post:
		return "POST"
	case Put:
		return "PUT"
	case Delete:
		return "DELETE"
	case Trace:
		return "TRACE"
	case PropFind:
		return "PROPFIND"
	case PropPatch:
		return "PROPPATCH"
	case MkCol:
		return "MKCOL"
	case Copy:
		return "COPY"
	case Move:
		return "MOVE"
	case Lock:
		return "LOCK"
	case Unlock:
		return "UNLOCK"
	case Acl:
		return "ACL"
	case Report:
		return "REPORT"
	case VersionControl:
		return "VERSIONCONTROL"
	case CheckIn:
		return "CHECKIN"
	case CheckOut:
		return "CHECKOUT"
	case UnCheckOut:
		return "UNCHECKOUT"
	case Search:
		return "SEARCH"
	case MkWorkspace:
		return "MKWORKSPACE"
	case Update:
		return "UPDATE"
	case Label:
		return "LABEL"
	case Merge:
		return "MERGE"
	case BaselineControl:
		return "BASELINECONTROL"
	case MkActivity:
		return "MKACTIVITY"
	}

	return "UNKNOWN"
}
