# `Jido.Messaging.MediaPolicy`
[🔗](https://github.com/agentjido/jido_messaging/blob/v1.0.0/lib/jido_messaging/media_policy.ex#L1)

Deterministic media normalization and bounded policy checks.

This module is used by ingest and outbound media paths to:

- normalize media payloads into canonical content structs
- enforce bounded type/size/count limits
- apply deterministic unsupported-media fallback/reject behavior

# `media_kind`

```elixir
@type media_kind() :: :image | :audio | :video | :file
```

Supported canonical media kinds.

# `metadata`

```elixir
@type metadata() :: %{
  accepted: [map()],
  rejected: [map()],
  count: non_neg_integer(),
  total_bytes: non_neg_integer(),
  policy: map()
}
```

Inbound/outbound policy result metadata.

# `unsupported_policy`

```elixir
@type unsupported_policy() :: :reject | :fallback_text
```

Outbound unsupported-media policy.

# `config`

```elixir
@spec config(keyword() | map()) :: keyword()
```

Resolves effective media policy config.

Config precedence:

1. defaults
2. `config :jido_messaging, :media_policy, ...`
3. runtime overrides (keyword/map)

# `normalize_inbound`

```elixir
@spec normalize_inbound(term(), keyword() | map()) ::
  {:ok, [struct()], metadata()}
  | {:error, {:media_policy_denied, atom()}, metadata()}
```

Normalizes inbound media list into canonical content blocks.

Returns either:

- `{:ok, content_blocks, metadata}`
- `{:error, {:media_policy_denied, reason}, metadata}`

# `prepare_outbound`

```elixir
@spec prepare_outbound(term(), module(), atom(), keyword() | map()) ::
  {:ok, map(), metadata()}
  | {:fallback_text, String.t(), metadata()}
  | {:error, term(), metadata()}
```

Preflights outbound media payload for policy/capability/callback checks.

Returns one of:

- `{:ok, media_payload, metadata}` - send/edit media via channel media callback
- `{:fallback_text, text, metadata}` - deterministic text fallback path
- `{:error, reason, metadata}` - deterministic reject path

---

*Consult [api-reference.md](api-reference.md) for complete listing*
