package models

import "strings"

// HasInventoryIdentity reports whether the DIMM has enough identifying
// inventory data to treat it as a populated module even when size is unknown.
func (m MemoryDIMM) HasInventoryIdentity() bool {
	return strings.TrimSpace(m.SerialNumber) != "" ||
		strings.TrimSpace(m.PartNumber) != "" ||
		strings.TrimSpace(m.Type) != "" ||
		strings.TrimSpace(m.Technology) != "" ||
		strings.TrimSpace(m.Description) != ""
}

// IsInstalledInventory reports whether the DIMM represents an installed module
// that should be kept in canonical inventory and exports.
func (m MemoryDIMM) IsInstalledInventory() bool {
	if !m.Present {
		return false
	}

	status := strings.ToLower(strings.TrimSpace(m.Status))
	switch status {
	case "empty", "absent", "not installed":
		return false
	}

	return m.SizeMB > 0 || m.HasInventoryIdentity()
}
