package Auth

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

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

// AddProfileImage adds a profile image
func AddProfileImage(w http.ResponseWriter, r *http.Request) {
	var (
		user        Models.User
		attachment  Models.Attachment
		decodedFile []byte
		fileName    string
		err         error
	)

	// Ignore error here, as middleware should handle auth
	user, _ = CheckCookieCurrentUser(w, r)

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

	if attachment.Data == "" {
		http.Error(w, "Error", http.StatusInternalServerError)
		return
	}

	decodedFile, err = base64.StdEncoding.DecodeString(attachment.Data)
	if err != nil {
		http.Error(w, "Error", http.StatusInternalServerError)
		return
	}

	fileName, err = Util.WriteFile(decodedFile)
	if err != nil {
		http.Error(w, "Error", http.StatusInternalServerError)
		return
	}

	attachment.FilePath = fileName

	user.Attachment = attachment

	err = Database.UpdateUser(user.ID.String(), &user)
	if err != nil {
		http.Error(w, "Error", http.StatusInternalServerError)
		return
	}

	w.WriteHeader(http.StatusNoContent)
}
