{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://wouldliker.com/data/schemas/video-template-packs.schema.json",
  "title": "Wouldliker Video Template Packs",
  "type": "object",
  "required": ["site", "type", "updated_at", "description", "selection_notes", "templates"],
  "properties": {
    "site": {"const": "wouldliker"},
    "type": {"const": "video_template_packs"},
    "updated_at": {"type": "string", "format": "date"},
    "description": {"type": "string"},
    "selection_notes": {"type": "string"},
    "templates": {
      "type": "array",
      "items": {"$ref": "#/$defs/template"}
    }
  },
  "$defs": {
    "template": {
      "type": "object",
      "required": [
        "template_id",
        "route",
        "sound_slug",
        "title",
        "use_when",
        "avoid_when",
        "duration_s",
        "inputs",
        "prompt_template",
        "shot_pattern",
        "caption_template",
        "cover_frame_guidance",
        "selection_keywords",
        "sound_behavior_role",
        "payoff_required"
      ],
      "properties": {
        "template_id": {"type": "string"},
        "route": {"type": "string"},
        "sound_slug": {"type": "string"},
        "title": {"type": "string"},
        "use_when": {"type": "string"},
        "avoid_when": {"type": "string"},
        "duration_s": {"type": "integer", "enum": [15, 30, 60]},
        "inputs": {"type": "array", "items": {"type": "string"}},
        "prompt_template": {"type": "string"},
        "shot_pattern": {
          "type": "array",
          "items": {
            "type": "object",
            "required": ["start_ms", "end_ms", "shot"],
            "properties": {
              "start_ms": {"type": "integer", "minimum": 0},
              "end_ms": {"type": "integer", "minimum": 1},
              "shot": {"type": "string"},
              "overlay": {"type": "string"},
              "notes": {"type": "string"}
            }
          }
        },
        "caption_template": {"type": "string"},
        "cover_frame_guidance": {"type": "string"},
        "selection_keywords": {"type": "array", "items": {"type": "string"}},
        "sound_behavior_role": {"type": "string"},
        "payoff_required": {"type": "boolean"}
      }
    }
  }
}
