
// myIdentityScore provides functions to keep track of a user's moderator identity score

package myIdentityScore

import "seekia/internal/cryptocurrency/cardanoAddress"
import "seekia/internal/cryptocurrency/ethereumAddress"
import "seekia/internal/moderation/moderatorScores"
import "seekia/internal/myIdentity"

import "errors"

// This function returns the address that moderators can send funds to to increase their identity score
//Outputs:
//	-bool: My moderator identity found
//	-string: Identity receiving address for provided cryptocurrency
//	-error
func GetMyIdentityScoreCryptocurrencyAddress(cryptocurrency string)(bool, string, error){

	if (cryptocurrency != "Ethereum" && cryptocurrency != "Cardano"){
		return false, "", errors.New("GetMyIdentityScoreCryptocurrencyAddress called with invalid cryptocurrency: " + cryptocurrency)
	}

	myIdentityExists, myIdentityHash, err := myIdentity.GetMyIdentityHash("Moderator")
	if (err != nil) { return false, "", err }
	if (myIdentityExists == false){
		return false, "", nil
	}

	if (cryptocurrency == "Ethereum"){

		address, err := ethereumAddress.GetIdentityScoreEthereumAddressFromIdentityHash(myIdentityHash)
		if (err != nil) { return false, "", err }

		return true, address, nil

	}

	// cryptocurrency == "Cardano"

	address, err := cardanoAddress.GetIdentityScoreCardanoAddressFromIdentityHash(myIdentityHash)
	if (err != nil) { return false, "", err }

	return true, address, nil
}

// This function returns our identity score
// It is not retrieving this score from the web.
// The score is calculated from trusted or verified address deposits which we have already downloaded.
//Outputs:
//	-bool: My Moderator identity found
//	-float64: My Moderator identity score
//	-bool: Score is sufficient
//	-bool: Score is enough to ban moderators
//	-int: Number of allowed reviews
//	-error
func GetMyIdentityScore()(bool, float64, bool, bool, int, error){

	myIdentityExists, myIdentityHash, err := myIdentity.GetMyIdentityHash("Moderator")
	if (err != nil) { return false, 0, false, false, 0, err }
	if (myIdentityExists == false){
		return false, 0, false, false, 0, nil
	}

	identityScoreKnown, moderatorScore, scoreIsSufficient, moderatorCanBanModerators, numberOfReviewsAllowed, err := moderatorScores.GetModeratorIdentityScore(myIdentityHash)
	if (err != nil) { return false, 0, false, false, 0, err }

	return identityScoreKnown, moderatorScore, scoreIsSufficient, moderatorCanBanModerators, numberOfReviewsAllowed, nil
}


