"""标准库模拟按需读取。没有文件系统访问、网络查询或模型决策。"""
from dataclasses import dataclass


@dataclass(frozen=True)
class Principal:
    # 演示对象手工构造；生产必须由认证中间件生成。
    tenant: str
    user: str


RESOURCES = {
    "order:A1042": {
        "tenant": "shop-a", "user": "user-417", "version": "r12",
        "summary": "订单，包含签收与商品信息",
        "sections": {"delivery": "2026-09-01 签收", "product": "普通商品"},
    },
    "order:B2000": {
        "tenant": "shop-b", "user": "user-800", "version": "r2",
        "summary": "其他租户订单", "sections": {"delivery": "不对当前主体开放"},
    },
}


def visible(principal: Principal, row: dict) -> bool:
    # 本例只实现租户与用户相等；真实授权还可能包含组织角色和用途。
    return row["tenant"] == principal.tenant and row["user"] == principal.user


def discover(principal: Principal) -> list[dict]:
    # 先检查发现权限再返回简介，不把其他主体资源标题送给模型。
    return [{"id": rid, "version": row["version"], "summary": row["summary"]}
            for rid, row in RESOURCES.items() if visible(principal, row)]


def read_section(principal: Principal, resource_id: str,
                 version: str, section: str) -> str:
    row = RESOURCES.get(resource_id)
    if row is None or not visible(principal, row):
        # 不存在和无权限采用同一对外错误，不泄露其他资源的详细状态。
        raise LookupError("资源不可用")
    if row["version"] != version:
        # 不将目录中的旧摘要与新正文静默组合。
        raise ValueError("版本已变化，请重新发现并读取")
    if section not in row["sections"]:
        raise LookupError("该部分不可用")
    return row["sections"][section]


if __name__ == "__main__":
    principal = Principal("shop-a", "user-417")
    print(discover(principal))
    print(read_section(principal, "order:A1042", "r12", "delivery"))
