TheMathemagicians/sevenkeys/cli/stashui.go

114 lines
2.4 KiB
Go

package cli
import (
"database/sql"
"fmt"
"sevenkeys/database"
"sevenkeys/logic"
)
var (
selectedCardPrintingId string
selectedCardPrintingSearchLine string
storageBoxLabel string
source string
cardCondition string
searchCriteria logic.SearchCriteria = logic.SearchCriteria{
SetCode: "",
Foil: logic.Either,
Promo: logic.Either,
Language: "en",
}
searchOptions logic.SearchOptions
)
func getSearchOptions(db *sql.DB) {
if searchOptions == nil {
fmt.Println("LOADING")
options, err := logic.GetAllSearchOptions(db, searchCriteria)
logic.Check(err)
searchOptions = options
fmt.Println("READY")
fmt.Println("RUN")
}
}
func getInfoDisplay(info string) string {
if info == "" {
return "[EMPTY]"
}
return info
}
func ShowStorageInfo() {
storageBoxDisplay := getInfoDisplay(storageBoxLabel)
sourceDisplay := getInfoDisplay(source)
conditionDisplay := getInfoDisplay(cardCondition)
fmt.Println("Storage location:", storageBoxDisplay, "|", "Source:", sourceDisplay, "|", "Condition:", conditionDisplay)
if selectedCardPrintingId != "" {
fmt.Println("Selected card:", selectedCardPrintingSearchLine)
}
}
func GetStorageOptions() {
storageBoxLabel = GetStringResponse("Storage box label:")
source = GetStringResponse("Card source:")
cardCondition = GetStringResponse("Card condition:")
}
func InsertSelectedCard(db *sql.DB) {
if selectedCardPrintingId == "" {
fmt.Println("No card selected, please [search] for a card printing.")
return
}
if storageBoxLabel == "" || cardCondition == "" {
GetStorageOptions()
}
storageLocation := database.CardStorageLocation{
CardPrintingId: selectedCardPrintingId,
StorageBox: storageBoxLabel,
Source: source,
CardCondition: cardCondition,
}
err := logic.StoreCard(db, storageLocation)
logic.Check(err)
fmt.Println("Inserted card")
}
func StashCliLoop(db *sql.DB) {
var command string
for {
ShowStorageInfo()
command = GetStringResponse("SEVENKEYS (stash) $")
switch command {
case "back":
return
case "storage":
GetStorageOptions()
break
case "search":
getSearchOptions(db)
var err error
selectedCardPrintingId, selectedCardPrintingSearchLine, err = logic.Search(searchOptions)
logic.Check(err)
break
case "insert":
InsertSelectedCard(db)
break
default:
fmt.Println("Unrecognized command:", command)
break
}
}
}