import { ComplianceStatus, type FormElementDto } from '~/.api-client' import { complianceCheckableElementTypes, complianceMap } from './complianceMap' import type { FormElementId } from '~/types/FormElement' export function useApplicationFormValidator() { function validateFormElements(formElements: FormElementDto[]): Map { const formElementComplianceMap = new Map() formElements.forEach((formElement) => { if (!complianceCheckableElementTypes.includes(formElement.type)) return // Reset any previously set compliance status when all options are false const hasAtLeastOneOptionSet = formElement.options.some((option) => option.value && option.value !== 'false') if (!hasAtLeastOneOptionSet) { formElementComplianceMap.delete(formElement.id) return } formElement.options.forEach((option) => { if (!option.value) { console.log(`Value missing for ${formElement.type}`) return } const currentHighestComplianceStatus = complianceMap?.get(option.processingPurpose)?.get(option.employeeDataCategory) ?? ComplianceStatus.NonCritical const currentHighestComplianceStatusPos = Object.values(ComplianceStatus).indexOf(currentHighestComplianceStatus) if (formElementComplianceMap.has(formElement.id)) { const newComplianceStatus = formElementComplianceMap.get(formElement.id)! const newComplianceStatusPos = Object.values(ComplianceStatus).indexOf(newComplianceStatus) if (newComplianceStatusPos > currentHighestComplianceStatusPos) { formElementComplianceMap.set(formElement.id, newComplianceStatus) } } else { formElementComplianceMap.set(formElement.id, currentHighestComplianceStatus) } }) }) return formElementComplianceMap } return { validateFormElements } }