// Copyright 2017 The Go Authors.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package app

import "strings"

// parseQueryString splits a user-entered query into one or more storage server queries.
// The supported query formats are:
//     prefix | one vs two  - parsed as {"prefix one", "prefix two"}
//     prefix one vs two    - parsed as {"prefix one", "two"}
//     anything else        - parsed as {"anything else"}
// The vs and | separators must not be quoted.
func parseQueryString(q string) []string {
	var queries []string
	var parts []string
	var prefix string
	quoting := false
	for r := 0; r < len(q); {
		switch c := q[r]; {
		case c == '"' && quoting:
			quoting = false
			r++
		case quoting:
			if c == '\\' {
				r++
			}
			r++
		case c == '"':
			quoting = true
			r++
		case c == ' ', c == '\t':
			switch part := q[:r]; {
			case part == "|" && prefix == "":
				prefix = strings.Join(parts, " ") + " "
				parts = nil
			case part == "vs":
				queries = append(queries, prefix+strings.Join(parts, " "))
				parts = nil
			default:
				parts = append(parts, part)
			}
			q = q[r+1:]
			r = 0
		default:
			if c == '\\' {
				r++
			}
			r++
		}
	}
	if len(q) > 0 {
		parts = append(parts, q)
	}
	if len(parts) > 0 {
		queries = append(queries, prefix+strings.Join(parts, " "))
	}
	return queries
}
