"""Intermediate UI effects checked from fresh owned fields, never send status."""
from copy import deepcopy


def current_ui_effect(node, snapshot, receipt):
    from .arbeit_operations import _fresh, _stamp
    expected = (receipt or {}).get('expected_effect')
    if not isinstance(expected, dict) or expected.get('kind') != 'ui_state':
        return None
    equal, changed = expected.get('fields', {}), expected.get('changed_fields', {})
    if not isinstance(equal, dict) or not isinstance(changed, dict) or not (equal or changed):
        return None
    for proof in snapshot.get('ui_effect_proofs', []):
        if not _fresh(proof, snapshot) or proof.get('kind') != 'ui_state':
            continue
        if proof.get('node_id') != node['id'] or proof.get('quest_id') != node['quest_id']:
            continue
        if any(expected.get(k) is not None and proof.get(k) != expected[k]
               for k in ('phase','instance_id','accept_time','step_id','objective_index','source_revision')):
            continue
        try:
            if _stamp(proof['observed_at']) <= _stamp(receipt['observed_at']):
                continue
        except (KeyError, TypeError, ValueError):
            continue
        fields = proof.get('fields')
        if (isinstance(fields, dict) and all(k in fields and fields[k] == value for k,value in equal.items())
                and all(k in fields and fields[k] is not None and fields[k] != value for k,value in changed.items())):
            return deepcopy(proof)
    return None
