func Checkout(eventRepository *repository.EventsRepository) func(c *gin.Context) {
	return func(c *gin.Context) {
		event := eventRepository.Get(c.Param("id"))

		if event == nil {
			c.JSON(http.StatusNotFound, gin.H{"devMessage": "Event not found."})
		}

		var user entity.User

		if c.BindJSON(&user) == nil {
			if user.Email == "" {
				c.JSON(http.StatusBadRequest, gin.H{"devMessage": "User not contains a email."})
				return
			}

			members := make([]entity.User, 0)

			for _, member := range event.Members {
				if strings.EqualFold(member.Email, user.Email) {
					continue
				}

				members = append(members, member)
			}

			event.Members = members

			c.JSON(http.StatusOK, eventRepository.Save(event))
		}
	}
}
func GetMembers(eventRepository *repository.EventsRepository, usersRepository *repository.UsersRepository) func(c *gin.Context) {
	return func(c *gin.Context) {
		event := eventRepository.Get(c.Param("id"))

		if event == nil {
			c.JSON(http.StatusNotFound, gin.H{"devMessage": "Event not found."})
			return
		}

		skill := c.Query("skill")

		if skill == "" {
			if event.Members == nil {
				c.JSON(http.StatusOK, make([]entity.User, 0))
				return
			}

			c.JSON(200, event.Members)
			return
		}

		emails := make([]string, 0)

		if event.Members == nil {
			c.JSON(http.StatusOK, make([]entity.User, 0))
			return
		}

		for _, member := range event.Members {
			emails = append(emails, member.Email)
		}

		fullMembers := usersRepository.GetAllByEmails(emails)

		members := make([]entity.User, 0)

		skills := strings.Split(skill, ",")

	user:
		for _, fullUser := range fullMembers {
			for _, userSkill := range fullUser.Skills {
				for _, querySkill := range skills {
					if strings.EqualFold(querySkill, userSkill) {
						members = append(members, fullUser)
						continue user
					}
				}
			}
		}

		c.JSON(http.StatusOK, members)
	}
}
func CreateEvent(eventRepository *repository.EventsRepository) func(c *gin.Context) {
	return func(c *gin.Context) {
		event := &entity.Event{}

		if c.BindJSON(&event) == nil {
			if event.Owner.Email == "" {
				c.JSON(http.StatusBadRequest, gin.H{"devMessage": "Event not contains a owner."})
				return
			}

			c.JSON(http.StatusOK, eventRepository.Save(event))
		}
	}
}
func GetEvents(eventRepository *repository.EventsRepository) func(c *gin.Context) {
	return func(c *gin.Context) {
		name := c.Query("name")

		log.Printf("Name: %s\n", name)

		if name == "" {
			c.JSON(200, eventRepository.GetAll())
			return
		}

		c.JSON(200, eventRepository.GetByName(name))
	}
}
func Checkin(eventRepository *repository.EventsRepository) func(c *gin.Context) {
	return func(c *gin.Context) {
		event := eventRepository.Get(c.Param("id"))

		if event == nil {
			c.JSON(http.StatusNotFound, gin.H{"devMessage": "Event not found."})
		}

		var user entity.User

		if c.BindJSON(&user) == nil {
			if user.Email == "" {
				c.JSON(http.StatusBadRequest, gin.H{"devMessage": "User not contains a email."})
				return
			}

			event.Members = append(event.Members, user)

			c.JSON(http.StatusOK, eventRepository.Save(event))
		}
	}
}