// Copyright 2023 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT

package repo

import "code.gitea.io/gitea/models/db"

// OrderByMap represents all possible search order
var OrderByMap = map[string]map[string]db.SearchOrderBy{
	"asc": {
		"alpha":    "owner_name ASC, name ASC",
		"created":  db.SearchOrderByOldest,
		"updated":  db.SearchOrderByLeastUpdated,
		"size":     "size ASC",
		"git_size": "git_size ASC",
		"lfs_size": "lfs_size ASC",
		"id":       db.SearchOrderByID,
		"stars":    db.SearchOrderByStars,
		"forks":    db.SearchOrderByForks,
	},
	"desc": {
		"alpha":    "owner_name DESC, name DESC",
		"created":  db.SearchOrderByNewest,
		"updated":  db.SearchOrderByRecentUpdated,
		"size":     "size DESC",
		"git_size": "git_size DESC",
		"lfs_size": "lfs_size DESC",
		"id":       db.SearchOrderByIDReverse,
		"stars":    db.SearchOrderByStarsReverse,
		"forks":    db.SearchOrderByForksReverse,
	},
}

// OrderByFlatMap is similar to OrderByMap but use human language keywords
// to decide between asc and desc
var OrderByFlatMap = map[string]db.SearchOrderBy{
	"newest":                OrderByMap["desc"]["created"],
	"oldest":                OrderByMap["asc"]["created"],
	"recentupdate":          OrderByMap["desc"]["updated"],
	"leastupdate":           OrderByMap["asc"]["updated"],
	"reversealphabetically": OrderByMap["desc"]["alpha"],
	"alphabetically":        OrderByMap["asc"]["alpha"],
	"reversesize":           OrderByMap["desc"]["size"],
	"size":                  OrderByMap["asc"]["size"],
	"reversegitsize":        OrderByMap["desc"]["git_size"],
	"gitsize":               OrderByMap["asc"]["git_size"],
	"reverselfssize":        OrderByMap["desc"]["lfs_size"],
	"lfssize":               OrderByMap["asc"]["lfs_size"],
	"moststars":             OrderByMap["desc"]["stars"],
	"feweststars":           OrderByMap["asc"]["stars"],
	"mostforks":             OrderByMap["desc"]["forks"],
	"fewestforks":           OrderByMap["asc"]["forks"],
}