package Friends

import (
	"encoding/json"
	"net/http"
	"net/url"
	"strings"

	"git.tovijaeschke.xyz/tovi/Envelope/Backend/Api/Auth"
	"git.tovijaeschke.xyz/tovi/Envelope/Backend/Database"
	"git.tovijaeschke.xyz/tovi/Envelope/Backend/Models"
)

func EncryptedFriendRequestList(w http.ResponseWriter, r *http.Request) {
	var (
		userSession Models.Session
		friends     []Models.FriendRequest
		returnJson  []byte
		err         error
	)

	userSession, err = Auth.CheckCookie(r)
	if err != nil {
		http.Error(w, "Forbidden", http.StatusUnauthorized)
		return
	}

	friends, err = Database.GetFriendRequestsByUserId(userSession.UserID.String())
	if err != nil {
		http.Error(w, "Error", http.StatusInternalServerError)
		return
	}

	returnJson, err = json.MarshalIndent(friends, "", "  ")
	if err != nil {
		http.Error(w, "Error", http.StatusInternalServerError)
		return
	}

	w.WriteHeader(http.StatusOK)
	w.Write(returnJson)
}

func EncryptedFriendList(w http.ResponseWriter, r *http.Request) {
	var (
		friends    []Models.Friend
		query      url.Values
		friendIds  []string
		returnJson []byte
		ok         bool
		err        error
	)

	query = r.URL.Query()
	friendIds, ok = query["friend_ids"]
	if !ok {
		http.Error(w, "Invalid Data", http.StatusBadGateway)
		return
	}

	// TODO: Fix error handling here
	friendIds = strings.Split(friendIds[0], ",")

	friends, err = Database.GetFriendsByIds(friendIds)
	if err != nil {
		http.Error(w, "Error", http.StatusInternalServerError)
		return
	}

	returnJson, err = json.MarshalIndent(friends, "", "  ")
	if err != nil {
		http.Error(w, "Error", http.StatusInternalServerError)
		return
	}

	w.WriteHeader(http.StatusOK)
	w.Write(returnJson)
}