"""Puzzle Box visual rules — 30-second mood/mystery format.

Configures the prompt engine for atmospheric, face-dominant,
per-character lens grammar compositions.
"""

from visual.format_interface import (
    FormatVisualRules,
    BeatPolicy,
    GrammarBleedSchedule,
)

RULES = FormatVisualRules(
    # ── Prompt Engine ──────────────────────────────────────────────
    # Mute action-oriented layers that don't apply to mood format
    mute_layers=["kinetic_action"],
    force_presets={
        "film_stock": "stylized_mood",
    },
    grammar_injection_layer=2,  # After Camera Line, before Subject
    supports_grammar=True,
    # ── Beat Policies ──────────────────────────────────────────────
    default_beat_policy=BeatPolicy(
        max_loras=1,
        composition_style="FACE_DOMINANT",
        allow_kinetic_prompting=False,
    ),
    beat_policies={
        "ENTRY_IMAGE": BeatPolicy(
            max_loras=0,
            composition_style="ENVIRONMENT",
            allow_kinetic_prompting=False,
        ),
        "VOICE": BeatPolicy(
            max_loras=1,
            composition_style="FACE_DOMINANT",
            allow_kinetic_prompting=False,
        ),
        "LINGER": BeatPolicy(
            max_loras=1,
            composition_style="FACE_DOMINANT",
            allow_kinetic_prompting=False,
        ),
        "BREAK": BeatPolicy(
            max_loras=2,
            composition_style="ENSEMBLE",
            allow_kinetic_prompting=True,
        ),
        "AFTERMATH": BeatPolicy(
            max_loras=1,
            composition_style="FACE_DOMINANT",
            allow_kinetic_prompting=False,
        ),
    },
    # ── Grammar Bleed Schedule ─────────────────────────────────────
    bleed_schedule=GrammarBleedSchedule(
        exposure_bleed={
            1: 0.0,  # BASELINE — pure character grammar
            2: 0.15,  # SENSORY BLEED — first contamination
            3: 0.5,  # SYSTEM HOSTILITY — dominant contamination
            4: 1.0,  # SPATIAL COLLAPSE — full merge
        }
    ),
    # ── Execution Defaults ─────────────────────────────────────────
    default_engine="kling",
    default_profile="kling-v1.5-pro-standard",
    aspect_ratio="9:16",
    default_duration=5,
    # ── Format-Specific Critic Questions ───────────────────────────
    format_check_questions=[
        "Is the depth of field noticeably shallow (background blurred)?",
        "Is the composition atmospheric and mood-driven rather than action-focused?",
        "Are there fewer than 3 characters clearly visible in the frame?",
    ],
)
