///|
pub fn base_github_request(
  body? : String = "{\"action\":\"opened\"}",
) -> WebhookRequest {
  WebhookRequest::new("github", Post, "/webhook/github", body, 1700000000)
  .with_header("x-github-event", "issues")
  .with_header("x-github-delivery", "delivery-1")
}

///|
pub fn example_github_request() -> WebhookRequest {
  sign_request(base_github_request(), VerificationPolicy::default())
}

///|
pub fn bad_signature_request() -> WebhookRequest {
  base_github_request().with_header("x-hub-signature-256", "sha256=bad")
}

///|
pub fn expired_request() -> WebhookRequest {
  let policy = VerificationPolicy::for_provider(ProviderProfile::generic()).with_secret(
    "demo-secret",
  )
  sign_request(
    WebhookRequest::new("generic", Post, "/webhook/generic", "{}", 1700000000)
    .with_header("x-webhook-timestamp", "1699990000")
    .with_header("x-webhook-event", "expired.test")
    .with_header("x-webhook-id", "delivery-old"),
    policy,
  )
}

///|
pub fn feishu_request() -> WebhookRequest {
  let policy = VerificationPolicy::for_provider(ProviderProfile::feishu()).with_secret(
    "demo-secret",
  )
  sign_request(
    WebhookRequest::new(
      "feishu",
      Post,
      "/webhook/feishu",
      "{\"header\":{\"event_id\":\"event-1\",\"event_type\":\"im.message.receive_v1\"},\"event\":{\"message\":{\"message_id\":\"m-1\"}}}",
      1700000000,
    )
    .with_header("x-lark-request-timestamp", "1700000000")
    .with_header("x-lark-request-nonce", "nonce-1"),
    policy,
  )
}

///|
pub fn stripe_request() -> WebhookRequest {
  let policy = VerificationPolicy::for_provider(ProviderProfile::stripe()).with_secret(
    "whsec_demo",
  )
  sign_request(
    WebhookRequest::new(
      "stripe",
      Post,
      "/webhook/stripe",
      "{\"id\":\"evt_1\",\"type\":\"invoice.paid\",\"data\":{\"object\":{\"id\":\"in_1\"}}}",
      1700000000,
    ),
    policy,
  )
}

///|
pub fn sample_requests() -> Array[WebhookRequest] {
  [
    example_github_request(),
    bad_signature_request(),
    expired_request(),
    feishu_request(),
  ]
}