package cli import ( "fmt" "marmic/servicetrade-toolbox/internal/api" "marmic/servicetrade-toolbox/internal/ui" "marmic/servicetrade-toolbox/internal/utils" ) func HandleJobs(session *api.Session) { for { ui.DisplayMenu([]string{ "Search Job by ID", "List Recent Jobs", "Create New Job", "Manage Job Attachments", "View Deficiencies", "Back to Main Menu", }, "Jobs Menu") choice, err := utils.GetUserChoice(6) if err != nil { ui.DisplayError("Invalid input:", err) utils.PressEnterToContinue() continue } switch choice { case 1: searchJobByID(session) case 2: listRecentJobs(session) case 3: createNewJob(session) case 4: manageJobAttachments(session) case 5: viewDeficiencyById(session) case 6: return } } } func searchJobByID(session *api.Session) { ui.ClearScreen() ui.DisplayMessage("Search Job by ID:") jobID := utils.PromptForInput("Enter Job ID: ") // TODO: Implement job search logic using the API ui.DisplayMessage(fmt.Sprintf("Searching for job with ID: %s", jobID)) utils.PressEnterToContinue() } func listRecentJobs(session *api.Session) { ui.ClearScreen() ui.DisplayMessage("Listing recent jobs...") // TODO: Implement recent jobs listing logic using the API utils.PressEnterToContinue() } func createNewJob(session *api.Session) { ui.ClearScreen() ui.DisplayMessage("Creating a new job...") // TODO: Implement job creation logic using the API utils.PressEnterToContinue() } func manageJobAttachments(session *api.Session) { ui.ClearScreen() jobID := utils.PromptForInput("Enter Job ID: ") attachments, err := session.GetAttachmentsForJob(jobID) if err != nil { ui.DisplayError("Failed to retrieve attachments:", err) utils.PressEnterToContinue() return } ui.DisplayMessage(fmt.Sprintf("Attachments for Job %s:", jobID)) if dataMap, ok := attachments["data"].(map[string]interface{}); ok { if attachmentsList, ok := dataMap["attachments"].([]interface{}); ok { for i, attachment := range attachmentsList { if att, ok := attachment.(map[string]interface{}); ok { ui.DisplayMessage(fmt.Sprintf("%d. %s", i+1, att["fileName"])) } } } } // TODO: Implement attachment deletion logic utils.PressEnterToContinue() } func viewDeficiencyById(session *api.Session) { ui.ClearScreen() deficiencyID := utils.PromptForInput("Enter Deficiency ID: ") ui.DisplayMessage(fmt.Sprintf("Fetching information for Deficiency %s...", deficiencyID)) deficiencies, err := session.GetDeficiencyInfoForJob(deficiencyID) if err != nil { ui.DisplayError("Failed to retrieve deficiency information:", err) utils.PressEnterToContinue() return } for _, deficiency := range deficiencies { ui.DisplayMessage(fmt.Sprintf("ID: %v", deficiency["id"])) ui.DisplayMessage(fmt.Sprintf("Description: %v", deficiency["description"])) ui.DisplayMessage(fmt.Sprintf("Status: %v", deficiency["status"])) ui.DisplayMessage("---") } utils.PressEnterToContinue() }