package main

import (
	"context"
	"log"
	"net/http"
)

func withCORS(h http.HandlerFunc) http.HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request) {
		w.Header().Set("Access-Control-Allow-Origin", "*")
		h(w, r)
	}
}

func main() {
	ctx := context.Background()
	DbInit(ctx)

	http.HandleFunc("/new/user", withCORS(HttpHandleUserNew))
	http.HandleFunc("/new/connection", withCORS(HttpHandleUserNewConnection))
	http.HandleFunc("/new/token", withCORS(HttpHandleTokenNew))
	http.HandleFunc("/new/group", withCORS(HttpHandeGroupCreate))

	http.HandleFunc("/mod/user/appearence", withCORS(HttpHandleUserModifyAppearance))
	http.HandleFunc("/mod/user/about", withCORS(HttpHandleUserModifyAbout))
	http.HandleFunc("/mod/connection/accept", withCORS(HttpHandleUserAcceptConnection))
	http.HandleFunc("/mod/connection/delete", withCORS(HttpHandleUserDeleteConnection))
	http.HandleFunc("/mod/group/addusers", withCORS(HttpHandleGroupAddUsers))
	http.HandleFunc("/mod/group/removeusers", withCORS(HttpHandleGroupRemoveUser))
	http.HandleFunc("/mod/group/color", withCORS(HttpHandleGroupChangeColor))
	http.HandleFunc("/mod/group/owner", withCORS(HttpHandleGroupChangeOwner))

	http.HandleFunc("/get/groups", withCORS(HttpHandleGroupsGetWithoutMembers))
	http.HandleFunc("/get/connections", withCORS(HttpHandleUserGetConnections))

	http.HandleFunc("/get/group/members", withCORS(HttpHandleGroupMembersGet))
	http.HandleFunc("/del/group", withCORS(HttpHandleGroupDelete))

	http.HandleFunc("/msg/user", withCORS(HttpHandleUserMessage))
	http.HandleFunc("/msg/group", withCORS(HttpHandleGroupMessage))
	http.HandleFunc("/ws", ServeWsConnection)

	log.Println("listening on :8080")
	log.Fatal(http.ListenAndServe(":8080", nil))
}
