
// myMatchScore provides functions to set and retrieve match score point values.
// Each mate desire has a point value.
// We add a desire's point value to a peer's match score if they fulfill a user's desires.

package myMatchScore

import "seekia/internal/myDatastores/myMap"
import "seekia/internal/helpers"

import "errors"

var myMatchScorePointsMapDatastore *myMap.MyMap

// This function must be called whenever we sign in to an app user
func InitializeMyMatchScorePointsDatastore()error{

	newMyMatchScorePointsMapDatastore, err := myMap.CreateNewMap("MyMatchScorePoints")
	if (err != nil) { return err }

	myMatchScorePointsMapDatastore = newMyMatchScorePointsMapDatastore

	return nil
}

func SetMyMatchScoreDesirePoints(desireName string, points int)error{

	if (desireName == ""){
		return errors.New("SetMyMatchScoreDesirePoints called with empty desireName.")
	}	

	if (points < 1 || points > 100) {
		return errors.New("SetMyMatchScoreDesirePoints called with invalid points value.")
	}

	pointsString := helpers.ConvertIntToString(points)

	err := myMatchScorePointsMapDatastore.SetMapEntry(desireName, pointsString)
	if (err != nil) { return err }

	return nil
}

func GetMyMatchScoreDesirePoints(desireName string)(int, error){

	if (desireName == ""){
		return 0, errors.New("GetMyMatchScoreDesirePoints called with empty desireName.")
	}

	entryExists, currentPoints, err := myMatchScorePointsMapDatastore.GetMapEntry(desireName)
	if (err != nil) { return 0, err }
	if (entryExists == false){
		return 1, nil
	}

	currentPointsInt, err := helpers.ConvertStringToInt(currentPoints)
	if (err != nil){
		return 0, errors.New("My current match score desire points is invalid: Not an int: " + currentPoints)
	}
	if (currentPointsInt < 1 || currentPointsInt > 100){
		return 0, errors.New("My current match score desire points is invalid: Out of range: " + currentPoints)
	}

	return currentPointsInt, nil
}


