package criteriaimport ("strings""github.com/navidrome/navidrome/log")type SortField struct {Field stringDesc bool}func (c Criteria) OrderByFields() []SortField {sortValue := c.Sortif sortValue == "" {sortValue = "title"}order := strings.ToLower(strings.TrimSpace(c.Order))if order != "" && order != "asc" && order != "desc" {log.Error("Invalid value in 'order' field. Valid values: 'asc', 'desc'", "order", c.Order)order = ""}parts := strings.Split(sortValue, ",")fields := make([]SortField, 0, len(parts))for _, part := range parts {part = strings.TrimSpace(part)if part == "" {continue}desc := falseif strings.HasPrefix(part, "+") || strings.HasPrefix(part, "-") {desc = strings.HasPrefix(part, "-")part = strings.TrimSpace(part[1:])}info, ok := LookupField(part)if !ok {log.Error("Invalid field in 'sort' field", "sort", part)continue}if order == "desc" {desc = !desc}fields = append(fields, SortField{Field: info.Name(), Desc: desc})}if len(fields) == 0 {log.Warn("No valid sort fields found in 'sort', falling back to 'title'", "sort", sortValue)return []SortField{{Field: "title", Desc: false}}}return fields}func (c Criteria) SortFieldNames() []string {sortFields := c.OrderByFields()names := make([]string, len(sortFields))for i, sf := range sortFields {names[i] = sf.Field}return names}