"""Canonical immutable employment terms shared by transfer consent and completion."""
import json
from rest_framework import serializers


def normalize_terms(raw):
    from .api_serializers import CompleteSerializer
    if not isinstance(raw, dict):
        raise serializers.ValidationError("contract_terms must be an object.")
    serializer = CompleteSerializer(data=raw)
    unknown = set(raw) - set(serializer.fields)
    if unknown:
        raise serializers.ValidationError("Unknown contract term fields.")
    serializer.is_valid(raise_exception=True)
    value = dict(serializer.validated_data)
    value["compensation_frequency"] = value.get("compensation_frequency") or "MONTHLY"
    value.setdefault("compensation_custom_interval_days", None)
    return json.loads(json.dumps(value, default=str))
