package Messages

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

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

// ConversationList returns an encrypted list of all Conversations
func ConversationList(w http.ResponseWriter, r *http.Request) {
	var (
		conversationDetails []Models.UserConversation
		userSession         Models.Session
		returnJSON          []byte
		values              url.Values
		page                int
		err                 error
	)

	values = r.URL.Query()

	page, err = strconv.Atoi(values.Get("page"))
	if err != nil {
		page = 0
	}

	userSession, _ = Auth.CheckCookie(r)

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

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

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

// ConversationDetailsList returns an encrypted list of all  ConversationDetails
func ConversationDetailsList(w http.ResponseWriter, r *http.Request) {
	var (
		conversationDetails []Models.ConversationDetail
		detail              Models.ConversationDetail
		query               url.Values
		conversationIds     []string
		returnJSON          []byte
		i                   int
		ok                  bool
		err                 error
	)

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

	conversationIds = strings.Split(conversationIds[0], ",")

	conversationDetails, err = Database.GetConversationDetailsByIds(
		conversationIds,
	)
	if err != nil {
		http.Error(w, "Error", http.StatusInternalServerError)
		return
	}

	for i, detail = range conversationDetails {
		if detail.AttachmentID == nil {
			continue
		}

		conversationDetails[i].Attachment.ImageLink = detail.Attachment.FilePath
	}

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

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