package Messages

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

	"github.com/gofrs/uuid"

	"git.tovijaeschke.xyz/tovi/Capsule/Backend/Database"
	"git.tovijaeschke.xyz/tovi/Capsule/Backend/Models"
)

type rawUpdateConversationData struct {
	ID                string                          `json:"id"`
	Name              string                          `json:"name"`
	Users             []Models.ConversationDetailUser `json:"users"`
	UserConversations []Models.UserConversation       `json:"user_conversations"`
}

// UpdateConversation updates the conversation data, such as title, users, etc
func UpdateConversation(w http.ResponseWriter, r *http.Request) {
	var (
		rawConversationData rawUpdateConversationData
		messageThread       Models.ConversationDetail
		err                 error
	)

	err = json.NewDecoder(r.Body).Decode(&rawConversationData)
	if err != nil {
		http.Error(w, "Error", http.StatusInternalServerError)
		return
	}

	messageThread = Models.ConversationDetail{
		Base: Models.Base{
			ID: uuid.FromStringOrNil(rawConversationData.ID),
		},
		Name:  rawConversationData.Name,
		Users: rawConversationData.Users,
	}

	err = Database.UpdateConversationDetail(&messageThread)
	if err != nil {
		http.Error(w, "Error", http.StatusInternalServerError)
		return
	}

	if len(rawConversationData.UserConversations) > 0 {
		err = Database.UpdateOrCreateUserConversations(&rawConversationData.UserConversations)
		if err != nil {
			http.Error(w, "Error", http.StatusInternalServerError)
			return
		}
	}

	w.WriteHeader(http.StatusNoContent)
}
