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"
)

// RawCreateConversationData for holding POST payload
type RawCreateConversationData struct {
	ID                string                          `json:"id"`
	Name              string                          `json:"name"`
	TwoUser           string                          `json:"two_user"`
	Users             []Models.ConversationDetailUser `json:"users"`
	UserConversations []Models.UserConversation       `json:"user_conversations"`
}

// CreateConversation creates ConversationDetail, ConversationDetailUsers and UserConversations
func CreateConversation(w http.ResponseWriter, r *http.Request) {
	var (
		rawConversationData RawCreateConversationData
		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,
		TwoUser: rawConversationData.TwoUser,
		Users:   rawConversationData.Users,
	}

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

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

	w.WriteHeader(http.StatusNoContent)
}
