package routing

import (
	"github.com/veylant/ia-gateway/internal/pii"
)

// Entity type constants mirror the values emitted by the PII detection layers.
// Regex layer types (high-precision):
const (
	entityIBAN       = "IBAN"
	entityFRSSN      = "FR_SSN"
	entityCreditCard = "CREDIT_CARD"
	entityEmailAddr  = "EMAIL"
	entityPhoneFR    = "PHONE_FR"
	entityPhoneIntl  = "PHONE_INTL"
)

// NER layer types (Presidio / spaCy):
const (
	entityPerson   = "PERSON"
	entityLocation = "LOCATION"
	entityOrg      = "ORGANIZATION"
)

// entitySensitivity maps known entity types to their sensitivity level.
// Types not listed are treated as Low.
var entitySensitivity = map[string]Sensitivity{
	// Critical — financial / identity data; highest regulatory risk
	entityIBAN:       SensitivityCritical,
	entityFRSSN:      SensitivityCritical,
	entityCreditCard: SensitivityCritical,
	// High — personal identifiable data
	entityPerson:   SensitivityHigh,
	entityLocation: SensitivityHigh,
	entityOrg:      SensitivityHigh,
	// Medium — contact information
	entityEmailAddr: SensitivityMedium,
	entityPhoneFR:   SensitivityMedium,
	entityPhoneIntl: SensitivityMedium,
}

// ScoreFromEntities derives a single Sensitivity level from a slice of detected PII entities.
// The score is the maximum level across all entities.
// If no entities are detected, SensitivityNone is returned.
func ScoreFromEntities(entities []pii.Entity) Sensitivity {
	max := SensitivityNone
	for _, e := range entities {
		level, ok := entitySensitivity[e.EntityType]
		if !ok {
			level = SensitivityLow // unknown entity types are at least low
		}
		if level > max {
			max = level
		}
	}
	return max
}
