admin.gno

package cla

import (
	"chain"

	"gno.land/p/moul/addrset"
	"gno.land/p/moul/helplink"
	"gno.land/r/gov/dao"
)

const RequiredHashChangedEvent = "CLARequiredHashChanged"

// ProposeNewCLA creates a govdao proposal to update the CLA document hash and URL.
// When executed, it resets all existing signatures.
// Propose an empty hash to disable CLA enforcement.
func ProposeNewCLA(newHash, newURL string) dao.ProposalRequest {
	cb := func(cur realm) error {
		setRequiredHash(newHash)
		claURL = newURL
		return nil
	}

	desc := "Propose updating the CLA requirement.\n\n"
	if requiredHash != "" {
		desc += "Current hash: " + requiredHash + "\n"
	}
	if claURL != "" {
		desc += "Current URL: " + claURL + "\n"
	}
	if newHash != "" {
		desc += "New hash: " + newHash + "\n"
	}
	if newURL != "" {
		desc += "New URL: " + newURL + "\n"
	}
	if newHash == "" {
		desc += "This proposal disables CLA enforcement.\n"
	}

	return dao.NewProposalRequest(
		"Update CLA requirement",
		desc,
		dao.NewSimpleExecutor(cb, helplink.Realm("gno.land/r/sys/cla").Home()),
	)
}

func setRequiredHash(newHash string) {
	prevHash := requiredHash
	requiredHash = newHash
	signatures = addrset.Set{} // reset all signatures

	chain.Emit(
		RequiredHashChangedEvent,
		"from", prevHash,
		"to", newHash,
	)
}