"""Map App Block plans onto Forms binding sources. Packs do not own form_key."""
from __future__ import annotations

from collections.abc import Sequence

from src.domain.app_blocks.schemas import AppBlockPlan
from src.domain.forms.composition import (
    FormBindingSource,
    InstalledPackView,
    collect_form_binding_sources,
)


def sources_from_plan_and_packs(
    plan: AppBlockPlan | None,
    packs: Sequence[InstalledPackView],
) -> tuple[FormBindingSource, ...]:
    planned = [block.id for block in plan.blocks] if plan is not None else []
    return collect_form_binding_sources(planned_block_ids=planned, packs=packs)
