package view import ( "bufio" "controle-de-estoque/model" "errors" "fmt" "os" "strconv" "strings" ) var reader = bufio.NewReader(os.Stdin) func ShowMenu() { fmt.Print(` ============ CONTROLE DE ESTOQUE ============== ESCOLHA UMA DAS OPÇÕES: 1 / adicionar - Adiciona o produto no estoque 2 / listar - Lista todos os produtos do estoque 3 / atualizar - Atualiza um produto do estoque 4 / deletar - Deleta um produto do estoque 0 / sair - Sair do programa ================================================= `) } func ShowError(err error) { fmt.Println("Error: ", err) } func ShowMessage(msg string, args []any) { if args == nil { fmt.Println(msg) return } fmt.Printf(msg, args...) } func ReadMenuInput() (string, error) { input, err := reader.ReadString('\n') input = strings.TrimSpace(input) if err != nil || input == "" { return input, errors.New("Opção Inválida!") } return input, nil } func ReadAddProductInput() *model.ProductInput { fmt.Print("Nome do produto: ") name, _ := reader.ReadString('\n') fmt.Print("Categoria do produto: ") category, _ := reader.ReadString('\n') fmt.Print("Preço: ") precoStr, _ := reader.ReadString('\n') price, _ := strconv.ParseFloat(strings.TrimSpace(precoStr), 64) fmt.Print("Quantidade: ") qtyStr, _ := reader.ReadString('\n') quantity, _ := strconv.Atoi(strings.TrimSpace(qtyStr)) return &model.ProductInput{ Name: strings.TrimSpace(name), Category: strings.TrimSpace(category), Price: price, Quantity: quantity, } } func ReadEditProductInput() (model.ProductID, string) { fmt.Print("Informe o Id do produto que deseja atualizar: ") productID, _ := reader.ReadString('\n') productIDInt, _ := strconv.Atoi(strings.TrimSpace(productID)) fmt.Print("Informe o nome do campo que deseja atualizar (nome, categoria, preco, quantidade): ") field, _ := reader.ReadString('\n') field = strings.TrimSpace(field) return model.ProductID(productIDInt), field } func ReadDeleteProductInput() model.ProductID { fmt.Print("Informe o Id do produto que deseja deletar: ") productID, _ := reader.ReadString('\n') productIDInt, _ := strconv.Atoi(strings.TrimSpace(productID)) return model.ProductID(productIDInt) } func ReadNewValueInput(field string) string { fmt.Printf("Informe o novo valor para %s: ", field) value, _ := reader.ReadString('\n') return strings.TrimSpace(value) } func ShowAllProducts(products map[model.ProductID]model.Product) { for _, p := range products { id := p.ID name := p.Name category := p.Category price := p.Price quantity := p.Quantity fmt.Printf( "==============================================="+"\n"+ "PRODUCT ID: %d"+"\n"+ "NAME: %s"+"\n"+ "CATEGORY: %s"+"\n"+ "PRICE: %.2f"+"\n"+ "QUANTITY: %d"+"\n"+ "==============================================="+"\n", id, name, category, price, quantity) } }