package cli import ( "fmt" "strconv" "github.com/spf13/cobra" ) var ( occRoom int64 occCount int occActivity string occVuln bool ) func init() { occCmd := &cobra.Command{ Use: "occupant", Short: "Manage room occupants", } addCmd := &cobra.Command{ Use: "add", Short: "Add occupants to a room", RunE: func(cmd *cobra.Command, args []string) error { o, err := db.CreateOccupant(occRoom, occCount, occActivity, occVuln) if err != nil { return err } fmt.Printf("Occupant added (ID: %d, room: %d, count: %d, activity: %s, vulnerable: %v)\n", o.ID, o.RoomID, o.Count, o.ActivityLevel, o.Vulnerable) return nil }, } addCmd.Flags().Int64Var(&occRoom, "room", 0, "room ID") addCmd.Flags().IntVar(&occCount, "count", 1, "number of occupants") addCmd.Flags().StringVar(&occActivity, "activity", "sedentary", "activity level (sleeping, sedentary, light, moderate, heavy)") addCmd.Flags().BoolVar(&occVuln, "vulnerable", false, "vulnerable occupant (elderly, child, ill)") addCmd.MarkFlagRequired("room") listCmd := &cobra.Command{ Use: "list", Short: "List occupants", RunE: func(cmd *cobra.Command, args []string) error { p, err := getActiveProfile() if err != nil { return err } occupants, err := db.ListAllOccupants(p.ID) if err != nil { return err } if len(occupants) == 0 { fmt.Println("No occupants found") return nil } for _, o := range occupants { vuln := "" if o.Vulnerable { vuln = " [VULNERABLE]" } fmt.Printf(" [%d] room %d — %d person(s), %s%s\n", o.ID, o.RoomID, o.Count, o.ActivityLevel, vuln) } return nil }, } editCmd := &cobra.Command{ Use: "edit ", Short: "Edit an occupant field", Args: cobra.ExactArgs(3), RunE: func(cmd *cobra.Command, args []string) error { id, err := strconv.ParseInt(args[0], 10, 64) if err != nil { return fmt.Errorf("invalid occupant ID: %s", args[0]) } return db.UpdateOccupant(id, args[1], args[2]) }, } removeCmd := &cobra.Command{ Use: "remove ", Short: "Remove an occupant entry", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { id, err := strconv.ParseInt(args[0], 10, 64) if err != nil { return fmt.Errorf("invalid occupant ID: %s", args[0]) } return db.DeleteOccupant(id) }, } occCmd.AddCommand(addCmd, listCmd, editCmd, removeCmd) rootCmd.AddCommand(occCmd) }