From cc323707fc77e70c6e99d5236ae1bac60f90f6cf Mon Sep 17 00:00:00 2001
From: Carlosokumu <carlosokumu254@gmail.com>
Date: Sat, 31 Aug 2024 10:21:20 +0300
Subject: [PATCH] setup  parser

---
 cmd/main.go                           |  6 +++++-
 internal/handlers/ussd/menuhandler.go | 24 +++++++++++++++---------
 2 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/cmd/main.go b/cmd/main.go
index 2daee8c..39136a9 100644
--- a/cmd/main.go
+++ b/cmd/main.go
@@ -83,7 +83,11 @@ func main() {
 
 	fp := path.Join(dp, sessionId)
 
-	ussdHandlers := ussd.NewHandlers(fp, &st)
+	ussdHandlers,err := ussd.NewHandlers(fp, &st)
+
+	if(err != nil){
+		fmt.Fprintf(os.Stderr, "handler setup failed with error: %v\n", err)
+	}
 
 	rfs.AddLocalFunc("select_language", ussdHandlers.SetLanguage)
 	rfs.AddLocalFunc("create_account", ussdHandlers.CreateAccount)
diff --git a/internal/handlers/ussd/menuhandler.go b/internal/handlers/ussd/menuhandler.go
index 4eb2a83..f5776f1 100644
--- a/internal/handlers/ussd/menuhandler.go
+++ b/internal/handlers/ussd/menuhandler.go
@@ -9,6 +9,7 @@ import (
 	"strconv"
 	"strings"
 
+	"git.defalsify.org/vise.git/asm"
 	"git.defalsify.org/vise.git/engine"
 	"git.defalsify.org/vise.git/lang"
 	"git.defalsify.org/vise.git/resource"
@@ -29,26 +30,31 @@ type FSData struct {
 	St   *state.State
 }
 
-
 type Handlers struct {
 	fs                 *FSData
+	parser             *asm.FlagParser
 	accountFileHandler utils.AccountFileHandlerInterface
 	accountService     server.AccountServiceInterface
 }
 
-func NewHandlers(path string, st *state.State) *Handlers {
+func NewHandlers(dir string, st *state.State) (*Handlers, error) {
+	pfp := path.Join(dir, "pp.csv")
+	parser := asm.NewFlagParser()
+	_, err := parser.Load(pfp)
+	if err != nil {
+		return nil, err
+	}
 	return &Handlers{
 		fs: &FSData{
-			Path: path,
+			Path: dir,
 			St:   st,
 		},
-		accountFileHandler: utils.NewAccountFileHandler(path + "_data"),
+		parser:             parser,
+		accountFileHandler: utils.NewAccountFileHandler(dir + "_data"),
 		accountService:     &server.AccountService{},
-	}
+	}, nil
 }
 
-
-
 // Define the regex pattern as a constant
 const pinPattern = `^\d{4}$`
 
@@ -191,7 +197,7 @@ func (h *Handlers) VerifyPin(ctx context.Context, sym string, input []byte) (res
 	return res, nil
 }
 
-//codeFromCtx retrieves language codes from the context that can be used for handling translations
+// codeFromCtx retrieves language codes from the context that can be used for handling translations
 func codeFromCtx(ctx context.Context) string {
 	var code string
 	engine.Logg.DebugCtxf(ctx, "in msg", "ctx", ctx, "val", code)
@@ -446,7 +452,7 @@ func (h *Handlers) Quit(ctx context.Context, sym string, input []byte) (resource
 	code := codeFromCtx(ctx)
 	l := gotext.NewLocale(translationDir, code)
 	l.AddDomain("default")
-	
+
 	res.Content = l.Get("Thank you for using Sarafu. Goodbye!")
 	res.FlagReset = append(res.FlagReset, models.USERFLAG_ACCOUNT_AUTHORIZED)
 	return res, nil