use super::helpers::{
  CapabilityAttachmentContract, ModelRegistryVariantContract, capability, capability_with_attachments, variant,
};

pub(super) fn gemini_variants(gemini_attachment: &CapabilityAttachmentContract) -> Vec<ModelRegistryVariantContract> {
  vec![
    variant(
      "gemini_api",
      "gemini-2.5-flash",
      "gemini-2.5-flash",
      &["gemini-2.5-flash"],
      &[],
      vec![capability_with_attachments(
        &["text", "image", "audio", "file"],
        &["text", "object", "structured"],
        gemini_attachment.clone(),
        Some(gemini_attachment.clone()),
        false,
      )],
      Some("gemini"),
      Some("gemini_api"),
      &["prefetch_remote_attachments", "structured_retry", "reasoning_medium"],
      Some("Gemini 2.5 Flash"),
    ),
    variant(
      "gemini_vertex",
      "gemini-2.5-flash",
      "gemini-2.5-flash",
      &["gemini-2.5-flash"],
      &[],
      vec![capability_with_attachments(
        &["text", "image", "audio", "file"],
        &["text", "object", "structured"],
        gemini_attachment.clone(),
        Some(gemini_attachment.clone()),
        false,
      )],
      Some("gemini"),
      Some("gemini_vertex"),
      &["prefetch_remote_attachments", "structured_retry", "reasoning_medium"],
      Some("Gemini 2.5 Flash"),
    ),
    variant(
      "gemini_api",
      "gemini-2.5-pro",
      "gemini-2.5-pro",
      &["gemini-2.5-pro"],
      &[],
      vec![capability_with_attachments(
        &["text", "image", "audio", "file"],
        &["text", "object", "structured"],
        gemini_attachment.clone(),
        Some(gemini_attachment.clone()),
        false,
      )],
      Some("gemini"),
      Some("gemini_api"),
      &["prefetch_remote_attachments", "structured_retry", "reasoning_high"],
      Some("Gemini 2.5 Pro"),
    ),
    variant(
      "gemini_vertex",
      "gemini-2.5-pro",
      "gemini-2.5-pro",
      &["gemini-2.5-pro"],
      &[],
      vec![capability_with_attachments(
        &["text", "image", "audio", "file"],
        &["text", "object", "structured"],
        gemini_attachment.clone(),
        Some(gemini_attachment.clone()),
        false,
      )],
      Some("gemini"),
      Some("gemini_vertex"),
      &["prefetch_remote_attachments", "structured_retry", "reasoning_high"],
      Some("Gemini 2.5 Pro"),
    ),
    variant(
      "gemini_api",
      "gemini-2.5-flash-image",
      "gemini-2.5-flash-image",
      &["gemini-2.5-flash-image"],
      &[],
      vec![capability_with_attachments(
        &["text", "image"],
        &["image"],
        gemini_attachment.clone(),
        Some(gemini_attachment.clone()),
        false,
      )],
      Some("gemini"),
      Some("gemini_api"),
      &["prefetch_remote_attachments"],
      Some("Gemini 2.5 Flash Image"),
    ),
    variant(
      "gemini_vertex",
      "gemini-2.5-flash-image",
      "gemini-2.5-flash-image",
      &["gemini-2.5-flash-image"],
      &[],
      vec![capability_with_attachments(
        &["text", "image"],
        &["image"],
        gemini_attachment.clone(),
        Some(gemini_attachment.clone()),
        false,
      )],
      Some("gemini"),
      Some("gemini_vertex"),
      &["prefetch_remote_attachments"],
      Some("Gemini 2.5 Flash Image"),
    ),
    variant(
      "gemini_api",
      "gemini-3.5-flash",
      "gemini-3.5-flash",
      &["gemini-3.5-flash"],
      &[],
      vec![capability_with_attachments(
        &["text", "image", "audio", "file"],
        &["text", "object", "structured"],
        gemini_attachment.clone(),
        Some(gemini_attachment.clone()),
        false,
      )],
      Some("gemini"),
      Some("gemini_api"),
      &["prefetch_remote_attachments", "structured_retry", "reasoning_high"],
      Some("Gemini 3.5 Flash"),
    ),
    variant(
      "gemini_vertex",
      "gemini-3.5-flash",
      "gemini-3.5-flash",
      &["gemini-3.5-flash"],
      &[],
      vec![capability_with_attachments(
        &["text", "image", "audio", "file"],
        &["text", "object", "structured"],
        gemini_attachment.clone(),
        Some(gemini_attachment.clone()),
        false,
      )],
      Some("gemini"),
      Some("gemini_vertex"),
      &["prefetch_remote_attachments", "structured_retry", "reasoning_high"],
      Some("Gemini 3.5 Flash"),
    ),
    variant(
      "gemini_api",
      "gemini-3.1-pro-preview",
      "gemini-3.1-pro-preview",
      &["gemini-3.1-pro-preview"],
      &[],
      vec![capability_with_attachments(
        &["text", "image", "audio", "file"],
        &["text", "object", "structured"],
        gemini_attachment.clone(),
        Some(gemini_attachment.clone()),
        false,
      )],
      Some("gemini"),
      Some("gemini_api"),
      &["prefetch_remote_attachments", "structured_retry", "reasoning_high"],
      Some("Gemini 3.1 Pro Preview"),
    ),
    variant(
      "gemini_vertex",
      "gemini-3.1-pro-preview",
      "gemini-3.1-pro-preview",
      &["gemini-3.1-pro-preview"],
      &[],
      vec![capability_with_attachments(
        &["text", "image", "audio", "file"],
        &["text", "object", "structured"],
        gemini_attachment.clone(),
        Some(gemini_attachment.clone()),
        false,
      )],
      Some("gemini"),
      Some("gemini_vertex"),
      &["prefetch_remote_attachments", "structured_retry", "reasoning_high"],
      Some("Gemini 3.1 Pro Preview"),
    ),
    variant(
      "gemini_api",
      "gemini-3.1-flash-lite-preview",
      "gemini-3.1-flash-lite-preview",
      &["gemini-3.1-flash-lite-preview"],
      &[],
      vec![capability_with_attachments(
        &["text", "image", "audio", "file"],
        &["text", "object", "structured"],
        gemini_attachment.clone(),
        Some(gemini_attachment.clone()),
        false,
      )],
      Some("gemini"),
      Some("gemini_api"),
      &["prefetch_remote_attachments", "structured_retry", "reasoning_high"],
      Some("Gemini 3.1 Flash Lite Preview"),
    ),
    variant(
      "gemini_vertex",
      "gemini-3.1-flash-lite-preview",
      "gemini-3.1-flash-lite-preview",
      &["gemini-3.1-flash-lite-preview"],
      &[],
      vec![capability_with_attachments(
        &["text", "image", "audio", "file"],
        &["text", "object", "structured"],
        gemini_attachment.clone(),
        Some(gemini_attachment.clone()),
        false,
      )],
      Some("gemini"),
      Some("gemini_vertex"),
      &["prefetch_remote_attachments", "structured_retry", "reasoning_high"],
      Some("Gemini 3.1 Flash Lite Preview"),
    ),
    variant(
      "gemini_api",
      "gemini-embedding-001",
      "gemini-embedding-001",
      &["gemini-embedding-001"],
      &[],
      vec![capability(&["text"], &["embedding"], true)],
      Some("gemini"),
      Some("gemini_api"),
      &[],
      Some("Gemini Embedding"),
    ),
    variant(
      "gemini_vertex",
      "gemini-embedding-001",
      "gemini-embedding-001",
      &["gemini-embedding-001"],
      &[],
      vec![capability(&["text"], &["embedding"], true)],
      Some("gemini"),
      Some("gemini_vertex"),
      &[],
      Some("Gemini Embedding"),
    ),
    variant(
      "gemini_api",
      "gemini-embedding-2",
      "gemini-embedding-2",
      &["gemini-embedding-2"],
      &[],
      vec![capability(&["text"], &["embedding"], false)],
      Some("gemini"),
      Some("gemini_api"),
      &[],
      Some("Gemini Embedding 2"),
    ),
    variant(
      "gemini_vertex",
      "gemini-embedding-2",
      "gemini-embedding-2",
      &["gemini-embedding-2"],
      &[],
      vec![capability(&["text"], &["embedding"], false)],
      Some("gemini"),
      Some("gemini_vertex"),
      &[],
      Some("Gemini Embedding 2"),
    ),
  ]
}
