"""Tests for take-level prompt/seed/version logging in ExecutionStore."""
import json
import pytest


def test_append_take_includes_prompt_and_seed(tmp_path):
    from recoil.execution.execution_store import ExecutionStore
    db_path = tmp_path / "test.db"
    store = ExecutionStore(project="test", db_path=db_path)

    # Insert a shot using insert_shot (no upsert_shot method exists)
    store.insert_shot({
        "shot_id": "ep001_sh001",
        "episode_id": "ep001",
        "pipeline": "still",
        "model": "nbp",
        "status": "pending",
    })

    # Append a take with prompt and seed
    take = {
        "take_id": "take_001",
        "prompt": "A cinematic close-up of Kit...",
        "seed": 42,
        "system_prompt_version": "v1.0",
        "model": "gemini-3-pro-image-preview",
        "cost": 0.134,
    }
    store.update_shot("ep001_sh001", append_take=take)

    # Verify take was stored with prompt data
    shot = store.get_shot("ep001_sh001")
    takes = shot["takes"]  # Already parsed by _row_to_dict
    assert len(takes) == 1
    assert takes[0]["prompt"] == "A cinematic close-up of Kit..."
    assert takes[0]["seed"] == 42
    assert takes[0]["system_prompt_version"] == "v1.0"


def test_multiple_takes_preserve_history(tmp_path):
    from recoil.execution.execution_store import ExecutionStore
    db_path = tmp_path / "test.db"
    store = ExecutionStore(project="test", db_path=db_path)

    store.insert_shot({
        "shot_id": "ep001_sh001",
        "episode_id": "ep001",
        "status": "pending",
    })

    # Append two takes
    store.update_shot("ep001_sh001", append_take={
        "take_id": "take_001", "prompt": "First prompt", "seed": 1
    })
    store.update_shot("ep001_sh001", append_take={
        "take_id": "take_002", "prompt": "Second prompt", "seed": 2
    })

    shot = store.get_shot("ep001_sh001")
    takes = shot["takes"]
    assert len(takes) == 2
    assert takes[0]["prompt"] == "First prompt"
    assert takes[1]["prompt"] == "Second prompt"
    assert takes[0]["seed"] == 1
    assert takes[1]["seed"] == 2
