package main

// type User struct {
// 	Dbid     string `json:"dbid"`
// 	Id       string `json:"id"`
// 	Username string `json:"username"`
// 	Password string `json:"password"`
// 	Email    string `json:"email"`
// 	Group    string `json:"group"`
// 	Enabled  bool   `json:"enabled"`
// }

///////////////// Users

// func (w *Webapp) GetUsers(c *gin.Context) {
// 	var cursor uint64

// 	var users []string

// 	cursor = 0
// 	log.Printf("start scanning %+v", c.ClientIP())
// 	for {
// 		var keys []string
// 		var err error
// 		keys, cursor, err = w.DB.Redis.Scan(w.DB.Ctx, cursor, "user:*", 10).Result()
// 		if err != nil {
// 			panic(err)
// 		}

// 		log.Printf("scan: %+v", keys)

// 		users = append(users, keys...)

// 		if cursor == 0 {
// 			break
// 		}
// 	}

// 	var retval []User

// 	for u := range users {
// 		usr := User{}
// 		hmget := w.DB.Redis.HMGet(w.DB.Ctx, users[u], "username", "email", "group", "enabled")
// 		hmget.Scan(&usr)

// 		log.Printf("user: %+v", usr)
// 		retval = append(retval, usr)
// 	}

// 	slices.SortFunc(retval,
// 		func(a, b User) int {
// 			return cmp.Compare(a.Username, b.Username)
// 		})

// 	c.JSON(http.StatusOK, retval)
// }

// func (w *Webapp) UpdateUser(c *gin.Context) {
// 	var user User

// 	if err := c.ShouldBind(&user); err != nil {
// 		log.Printf("req error: %+v", err)
// 		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
// 		return
// 	}

// 	user.Dbid = CalcId(user.Username, 8)

// 	ret := w.DB.Redis.HExists(w.DB.Ctx, "user:"+user.Dbid, "username").Val()
// 	if !ret {
// 		log.Printf("Exists: %+v", ret)
// 		err := w.DB.Redis.HSet(w.DB.Ctx, "user:"+user.Dbid, user).Err()
// 		if err != nil {
// 			log.Printf("set error: %+v", err)
// 		}
// 	} else {
// 		err := w.DB.Redis.HSet(w.DB.Ctx, "user:"+user.Dbid, "email", user.Email, "group", user.Group, "enabled", user.Enabled).Err()
// 		if err != nil {
// 			log.Printf("set error: %+v", err)
// 		}
// 	}

// 	log.Printf("new: %+v", user)

// 	c.JSON(http.StatusOK, gin.H{"status": "added"})
// }

// // func UpdateUser(c *gin.Context) {
// // 	var user common.User

// // 	if err := c.ShouldBind(&user); err != nil {
// // 		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
// // 		return
// // 	}

// // 	id := common.Id(user.Username, 8)

// // 	if err := db.Db.Redis.HSet(db.Db.Ctx, "user:"+id, "email", user.Email, "group", user.Group, "enabled", user.Enabled).Err(); err != nil {
// // 		log.Fatalf("set error: %+v", err)
// // 	}

// // 	log.Printf("update: %+v", user)

// // 	c.JSON(http.StatusOK, gin.H{"status": "updated"})
// // }

// func (w *Webapp) DeleteUser(c *gin.Context) {
// 	var user User

// 	if err := c.ShouldBind(&user); err != nil {
// 		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
// 		return
// 	}

// 	id := CalcId(user.Username, 8)

// 	log.Printf("deleting: %+v", "user:"+id)

// 	res, err := w.DB.Redis.HGetAll(w.DB.Ctx, "user:"+id).Result()
// 	if err != nil || len(res) == 0 {
// 		log.Printf("del error: %+v", err)
// 		c.JSON(http.StatusNotFound, gin.H{"status": "Not Found"})
// 		return
// 	}

// 	log.Printf("found: %+v", res)

// 	if err := w.DB.Redis.Del(w.DB.Ctx, "user:"+id).Err(); err != nil {
// 		log.Printf("del error: %+v", err)
// 	}

// 	log.Printf("del: %+v", user)

// 	c.JSON(http.StatusOK, gin.H{"status": "deleted"})
// }
