"""The owner supplies read-only sources and the business authorization check."""
from collections.abc import Callable
from easyremote import ComputeNode, Context
from collector import Collector, Query


def create_node(collector: Collector, authorize: Callable[[str, str, str], None]) -> ComputeNode:
    node = ComputeNode(namespace="incident")

    @node.register
    def collect_evidence(ctx: Context, service: str, environment: str, start: str, end: str) -> dict:
        """Collect read-only evidence for one authorized service and UTC window."""
        authorize(ctx.caller, service, environment)  # Must raise on denial.
        return collector.collect(Query(service, environment, start, end))

    return node
